Kas

9

SQL ve FQL Etiketleri

By Hüseyin Bora

SQL etiketi query niteliğine paremetre olarak verilen SQL sorgusu işletir ve id niteliğine verilen isim ile bir sonuc kümesi getirir.

Örnek

<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<faces>
<@import prefix="c" taglib="phpf.core" type="static"/>
<@import prefix="sql" taglib="phpf.db.sql"/>
<sql:sql id="results" query="select * from urun"/>
<table border="1" align="center">
<thead>
<th>Urun NO</th>
<th>Urun Adı</th>
<th>Fiyat</th>
<th>Resim</th>
</thead>
<c:foreach var="#{$results}" item="$urun">
<tr>
<td>#{$urun.no}</td>
<td>#{$urun.ad}</td>
<td>#{$urun.fiyat}</td>
<td><img src="#{$urun.resim}"/></td>
</tr>
</c:foreach>
</table>
</faces>
</body>
</html>

FQL Etiketi
FQL etiketi query niteliğine paremetre olarak verilen FQL sorgusu işletir ve id niteliğine verilen isim ile bir sonuc kümesi getirir.

Örnek

<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<faces>
<@import prefix="f" taglib="phpf.ui.*"/>
<@import prefix="fql" taglib="phpf.db.fql"/>
<fql:fql id="results" query="select u from urun u"/>
<f:grid name="grid" height="30%" width="75%" bind="$results" border="1">
<@item   key="no"  title="no" />
<@item   key="ad" title="Urun adı"/>
<@item   key="fiyat" title="fiyat"/>
</f:grid>
</faces>
</body>
</html>

SQL ve FQL etiketlerine @item etiketinin value niteliği ile parametre aktarılabilir.

Örneğin aşağıdaki gibibir ifademiz olsun

SELECT u FROM urun u WHERE u.fiyat >? AND u.fiyat <?

Örnek fiyat aralığı

<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<faces>
<@import prefix="f" taglib="phpf.ui.*"/>
<@import prefix="fql" taglib="phpf.db.fql"/>
<fql:fql id="results" query="select u from urun u WHERE u.fiyat >? AND u.fiyat <?">
<@item value ="100"/>
<@item value= "500"/>
</sql:fql>
<f:grid name="grid" height="30%" width="75%" bind="$results" border="1">
<@item   key="no"  title="no" />
<@item   key="ad" title="Urun adı"/>
<@item   key="fiyat" title="fiyat"/>
</f:grid>
</faces>
</body>
</html>

Eyl

27

Bileşen mimarisi (kendi bileşenlerinizi geliştirin)

By Hüseyin Bora

Bir faces bileşeni (component) oluşturmak için sınıfınızı Component sınıfından genişletirsiniz.

basit bir bileşenin en az iki metodu bulunmalıdır. Kurucu metod ve  startTag metodu.

Kurucu metodun iki parametresi bulunur birinci parametresi bir FacesController ikinci parametresi ise view dosyasında etiket olarak tanımlanan bileşenin nitelikler dizisidir.

function construct(FacesController &$controller,$args=null)

startTag metodu bileşen etiketinin başlangıç için çıktı üreten metodudur. Bir etiket açıldığında çalıştırılır.

endTag metodu bileşen etiketinin kapatıldığında çalıştırılan metodu.

Basit bir örnek

import("phpf.ui.component");
class Kalinyaz extends Component{
function Kalinyaz (FacesController &amp;$controller,$args=null){
parent::Component($controller,$args);
}
function startTag() {

return '<strong>';
}
function endTag() {

return '</strong>';
}}

Örneğimizde Kalinyaz isminde bir bileşen tanımladık <f:Kalinyaz> </f:Kalinyaz> etiketleri arasındaki metni kalın yazı tipi ile tarayıcıda göstermek istiyoruz. Bileşenimizi kullanmak istediğimiz dizin içerisine kalinyaz.php adı ile kayıt ediyoruz.

Kalinyaz bileşenini view içerisinde kullanımı.

<faces>
<@import prefix="my" taglib="dizinadi.kalinyaz"/>
<my:kalinyaz>
Bu yazı kalın olmalı
</my:kalinyaz>
Bu yazı normal
</faces>

Bileşen içerisinde Niteliklere erişim.

Bileşenin attributes uyesi nitelikleri içeren bir dizidir nitelik değerlerine

$this->attributes[nitelikadi] şeklinde erişilebilir.

Yukarıdaki örneğimizi biraz daha geliştirip metin rengi ve metin boyunu uygulayan bir bileşen haline getirelim. Aşağıdaki örneği inceleyin

import("phpf.ui.component");
class Kalinyaz extends Component{
function Kalinyaz (FacesController &amp;$controller,$args=null){
parent::Component($controller,$args);
}
function startTag() {
$html = '<strong>'.'<font color="'.$this->attributes[renk].
'" size="'.$this->attributes[boy].'">' ;

return $html;
}
function endTag() {

return '</font></strong>';
}}

Yukarıda bileşenimize boy ve renk adında iki nitelik olduğunu görülebilir.

Bileşenimizin view içerisinde kullanımı.

<faces>
<@import prefix="my" taglib="dizinadi.kalinyaz"/>
<my:kalinyaz boy="10" renk="red">
Her hangi bir yazı
</my:kalinyaz>
</faces>

Component sınıfının  doAttributes() metodu tüm nitelikleri eş değer ismi ile yerleştirir

function startTag() {

return '<strong>'.'<font'. $this->doAttributes() .'>' ;
}
<faces>
<@import prefix="my" taglib="dizinadi.kalinyaz"/>
<my:kalinyaz size="10" color="red">
Her hangi bir yazı
</my:kalinyaz>
</faces>

Bileşenlere eklenen öğeler bileşeninizin items uye dizinsinde yer alır
Items kullanımı için aşağıdaki örneği inceleyin

import("phpf.ui.component");
class Strong extends Component{
function Strong(FacesController &amp;$controller,$args=null){
parent::Component($controller,$args);
}
function startTag() {
$html = '<strong>'.'<font'. $this->doAttributes() .'>' ;

foreach($this->items as $item)
$html.= '<br/><a href="'.$item[url].'">'.$item[title].'</a>';

return $html;
}
function endTag() {

return '</font></strong>';
}
}

View içerisinde kullanımı

<faces>
<@import prefix="my" taglib="mypath.strong"/>
<my:strong name="test" size="4" face="Arial" color="red">
<@item url="http://www.google.com" title="google"/>
<@item url="http://www.webmahsulleri.com" title="WebMahsulleri"/>
bazı yazilar
</my:strong>
</faces>
<p class="MsoNormal">

Bir faces bileşeni (component) oluşturmak için sınıfınızı Component sınıfından genişletirsiniz.

basit bir bileşenin en az iki metodu bulunmalıdır. Kurucu metod ve startTag metodu.

Kurucu metodun iki parametresi bulunur birinci parametresi bir FacesController ikinci parametresi ise view dosyasında etiket olarak tanımlanan bileşenin nitelikler dizisidir.

function construct(FacesController &$controller,$args=null)

startTag metodu bileşen etiketinin başlangıç için çıktı üreten metodudur. Bir etiket açıldığında çalıştırılır.

endTag metodu bileşen etiketinin kapatıldığında çalıştırılan metodu.

Basit bir örnek

import(”phpf.ui.component”);

class Kalinyaz extends Component{

function Kalinyaz (FacesController &$controller,$args=null){

parent::Component($controller,$args);

}

function startTag() {

return ‘<strong>’;

}

function endTag() {

return ‘</strong>’;

}

}

Örneğimizde Kalinyaz isminde bir bileşen tanımladık <f:Kalinyaz> </f:Kalinyaz> etiketleri arasındaki metni kalın yazı tipi ile tarayıcıda göstermek istiyoruz. Bileşenimizi kullanmak istediğimiz dizin içerisine kalinyaz.php adı ile kayıt ediyoruz.

Kalinyaz bileşenini view içerisinde kullanımı.

<faces>

<@import prefix=”my” taglib=”dizinadi.kalinyaz”/>

<my:kalinyaz name=”yaz”>

Bu yazı kalın olmalı

</my:kalinyaz>

Bu yazı normal

</faces>

Bileşen içerisinde Niteliklere erişim.

Bileşenin attributes uyesi nitelikleri içeren bir dizidir nitelik değerlerine

$this->attributes[nitelikadi] şeklinde erişilebilir.

Yukarıdaki örneğimizi biraz daha geliştirip metin rengi ve metin boyunu uygulayan bir bileşen haline getirelim. Aşağıdaki örneği inceleyin

import(”phpf.ui.component”);

class Kalinyaz extends Component{

function Kalinyaz (FacesController &$controller,$args=null){

parent::Component($controller,$args);

}

function startTag() {

$html = ‘<strong>’.'<font color=”‘.$this->attributes[renk].

‘” size=”‘.$this->attributes[boy].’”>’ ;

return $html;

}

function endTag() {

return ‘</font></strong>’;

}

}

Yukarıda bileşenimize boy ve renk adında iki nitelik olduğunu görülebilir.

Bileşenimizin view içerisinde kullanımı.

<faces>

<@import prefix=”my” taglib=”dizinadi.kalinyaz”/>

<my:kalinyaz name=”yaz” boy=”10″ renk=”red”>

Her hangi bir yazı

</my:kalinyaz>

</faces>

Component sınıfının doAttributes() metodu tüm nitelikleri eş değer ismi ile yerleştirir

function startTag() {

return ‘<strong>’.'<font’. $this->doAttributes() .’>’ ;

}

<faces>

<@import prefix=”my” taglib=”dizinadi.kalinyaz”/>

<my:kalinyaz name=”yaz” size=”10″ color=”red”>

Her hangi bir yazı

</my:kalinyaz>

</faces>

Eyl

25

Doğrulamalar (Validation)

By Hüseyin Bora

Doğrulama tanımlamaları view(görünün) içerisinde bileşen niteliklerine atama yapılarak sağlanır. Doğrulama sonucları event (olay) nesnesinin niteliğine göre AJAX ya da sayfa post edilerek tarayıcıya gönderilir.

Doğrulama işlemlerinde bileşenlerin 5 niteliği bulunur.

Bunlar

  • validator
  • rule
  • messagefor
  • message
  • success

Validator: bu niteliğe static metodlar barındıran doğrulama sınıfının ismi verilmelidir. io dizininde filtler ve validator isimlerimlerinde hazır iki doğrulama sınıfı bulunmaktadır.

Rule : Validator niteliği ile bildirilen doğrulama sınıfının doğrulma işlemi için kullandığı metodun ismidir. (doğrulama metodu)

Message : Doğrulama işlemin sonucunun (false) yanlış  olması durumunda  verilecek olan uyarı  mesajdır. Örneğin “Hatali email adresi girdiniz ! ”

Success Doğrulama işlemin sonucunun (true) doğru  olması durumunda  verilecek olan mesajdır. . Örneğin “email adresiniz doğrulandı ! ”  Eğer doğrulama mesajı verilmek istenmiyorsa bu nitelik boş bırakılabilir.

Messagefor : message ve success ile belirtilen mesajların hangi bileşende görüntüleneceğidir.

FacesController varsayılan durum da bir doğrulama işleminin sonucu yanlış ise olay metotlarını işletmez . Doğrulama işleminin sonucu yanlış olduğu halde örneğin bir Clicked metodunun işletilmesini istiyorsanız FacesController ın setValidCallBack(boolean); metoduna true değerini vermeniz yeterlidir.

Doğrulama işleminin sonucunun doğru ya da yanlış olduğunu bileşenin isValid metodunun döndürdüğü değere bakarak anlaşılabilir.

Örnek Kullanıcı tarafından girilen e-mail Adresinin doğrulanması.

View görünüm dosyası

<faces>
<@import prefix="f" taglib="phpf.ui.*"/>
<f:form method="post">
E-Mail :<f:textbox
validator="filter"
rule="mail"
success="Mail adresiniz doğrulandı"
message=" Hatali email adresi girdiniz ! "
messagefor="msgbox"
/>
<f:message id="msgbox"/>
</f:form>
</faces>

Doğrulama işlemi sonucu doğru ise  msgbox isimli bileşende success ile belirtilen yanlış ise message ile belirtilen bilgi yer alır.

Filtler sınıfının metotları aşağıdaki gibidir.

  • required
  • mail
  • url
  • ip
  • float
  • int
  • boolean
  • regxp

Validator sınıfının metotları aşağıdaki gibidir.

  • required
  • equals
  • minLength
  • maxLength
  • mail
  • alpha
  • alpha_numeric
  • numeric
  • integer
  • betweenLength
  • between
  • boolean
  • test

Eyl

15

View State Kullanımı

By Hüseyin Bora

View state kullanımı sayesinde gorunum dosyalarınızda kalıcılık sağlayabilirsiniz. View state kullanımın temel amacı sayfanız post olduğunda verilerin kayıp olmamasını sağlamaktır.

View state ASP.Net kullanıcılarının aşina oldukları bir veri depolama yapısıdır buna ek olarak Java JSF  da benzer bir yapıya sahipdir. View state yapısı hantal bir yapı olarak bilinir ancak şuan için geliştirilmiş daha kullanışlı bir yöntem bulunmamaktadır. Bu yüzden View state kullanırken büyük boyutlardaki verilerinizi saklamamanızı öneririm bu sayfnızın ağırlaşmasına sebebiyet verir.

PHP Faces viewstate tanımları @definition direktifi ile kontrolcuye bildirilir

<@definition viewstate=”true” stroge=”xhtml”/>

definition direktifinin birinci niteliğine viewstate=”true” demekle viewstate’i etkin hale getirmiş olursunuz.
stroge niteliğine verdiğimiz değerile veriler için oluşturulucak depolama alanını belirtiyoruz bu alan xhtml yani istemci tarafındaki tarayıcı yada session sunucu tarafındaki oturum dosyası olabilir.

Kalıcılığını sağlamak istediğmiz bileşenleri tanımlarken placeholder niteliğine true değerini verimelisiniz.

View state kullanımına örnek olarak sayfanızın bir köşesinde kullanıcı adının verilmesi gerektiğini düşünelim.
bu işlem için her seferinde kullanıcı adını veritabanındaki tablodan cekmek yerine View state kullanabilirsiniz.

Örnek

<faces>
<@import prefix="phpf" taglib="phpf.ui.*"/>
<@definition viewstate="true" stroge="session"/>
<phpf:label name="uyeadi" placeholder="true"></phpf:label>
</faces>

Kontrolcu içerisinde bir sefer uyeadi nı guncellememiz kafidir.

$this->uyeadi->setText("XXX Hosgeldin");