By Hüseyin Bora
Programlanabilir şablonlar @htmlpattern lerdir yapısal geliştirme çalışmaları sürmektedir.
Örnek kullanıldığı her yerde1 ile 12 arasındaki sayıları gösteren pattern
Sablon.ptrn dosyası
<faces>
<@htmlpattern name="yaz" useprefix="my">
<c:for var="$i" begin="1" to="12" step="1">
<div style="color:red;font-weight:bold;" > #{$i} </div>
</c:for>
</@htmlpattern>
</faces>
View dosyası
<faces>
<@face file="sablon.ptrn"/>
<my:yaz/>
</faces>
Örneğin kullanıcı girişi için kullandığımız bir formumuz olsun formumuzu kullmak istediğimiz dosyaya include ederiz ve ismi ile etiketleriz
Sablon.ptrn dosyası
<faces>
<@import taglib="phpf.ui.*" prefix="f"/>
<@import taglib="phpf.core" prefix="c" type="static"/>
<@htmlpattern name="login" useprefix="my">
<f:form id="loginform">
<table>
<tr>
<td>User Name</td>
<td><f:textbox id="name"/></td>
</tr>
<tr>
<td>Password</td>
<td><f:textbox id="pass"/></td>
</tr>
</tr>
<tr>
<td>Password</td>
<td><f:button id="send" forname="loginform" text="Login" onclick="actionevent"/></td>
</tr>
</table>
</f:form>
</@htmlpattern>
</faces>
View dosyası
<faces>
<@face file="sablon.ptrn"/>
<my:login/>
</faces>
By Hüseyin Bora
Daha öncede bahsettiğim gibi (Şablon)patternler view dosyalarında tanımlanan bir çeşit veri yapılarıdır. Pattern kullanımındaki amaç kod yazımını minimuma indirmektir.
Örneğin veri girişi için kullandığımız formlarda çeşitli alanlar vardır örneğin textbox ve çoğuna validation (doğrulama) işlemleri uygularız her etiket için benzer niteliklere değerler aktarırız ve bu böyle uzar gider.
Bu arada PHP faces a pattrenlere yeni eklenen bir özellikte useprefix niteliğidir bu sayede oluşturduğumuz pattern useprefix niteliğine verdiğimiz ön ek ile ilişkilendirilir.
UI Patternler OOP deki sınıflara benzerler her bir nitelik override edilerek(geçersiz kılınabilir)
Örneğin bir formumuz olsun ve bu formdan sunucumuza ad,soyad,dogumyeri bilgileri gönderilecek olsun ve hiçbir bilginin boş bırakılmasını istemiyoruz.
Patterns.ptrn dosyası
<faces>
<@import taglib="phpf.ui.*" prefix="f"/>
<@pattern name="text" prefix="f" extends="textbox" useprefix="phpf"
validator="validator"
rule="required"
messagefor="label"
message="Lütfen bu alanı boş bırakmayın"/>
</faces>
Patterns.ptrn dosyamızı include ettiğimiz her dosyada phpf ön eki ile patternimize erişebiliriz
View dosyamız
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<faces>
<@face file="patterns.ptrn"/>
<f:form id="form">
ad <phpf:text id="ad"/>
</br>
soyad<phpf:text id="soyad"/>
</br>
sehir<phpf:text id="sehir"/>
<f:message id="label"/>
<f:button id="btn" text="Gonder" onclick="actionevent" forname="form"/>
</f:form>
</faces>
</body>
</html>
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>
By Hüseyin Bora
Grid bileşeni kendisine bind niteliği ile belirtilen Sınıf diziden bir HTML tablosu oluşturur. Oluşturulan tabloda hangi sutunların bulunacağı @item direktifi ile bildirilir. @item direktifinin key niteliğine Varlık sınıfının uye ismi title niteliğine ise sutunun başlığı yazılır.

@item direktifi ile tabloya sınıf harici bilgi eklemek için input niteliği kullanılır.
<@item input=”link” title=”Düzenle” url=”testet.php?edit=$no”/>
Örneğin yukarıdaki @item direktifi ile düzenle başlıklı bir bağlantı oluşturulur ve bağlantı adresi url niteliği ile belirtilir.
Örnek Aşağıdaki gibi bir Varlık sınfımız olsun
<?php
class Urun extends Entity
{
private $no;
private $ad;
private $fiyat;
private $resim;
function get($name) {
return $this->$name;
}
function set($name,$value) {
$this->$name = $value;
}
}
?>
Urunlerin listesini oluşturmak için aşağıdaki gibi bir kontrolcümüz olsun $list değişkenin içerisine veritabanından çektiğimiz bilgileri aktarıyoruz.
<?php
import("phpf.controllers.facete");
import("dbf.persistence");
import("entity.urun",true);
class UrunGrid extends Facete {
protected $list;
public function UrunGrid() {
parent::Facete();
$em = EntityManager::getInstance();
$query= $em->createQuery("Select u from urun u");
$query->execute();
$this->list = $q->getResultList();
$this->render("grid.html");
}
}
?>
Görünüm Dosyamız grid etiketinin bind niteliğine bind=”$this.list” eklememiz önemli
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<faces>
<@import prefix="f" taglib="phpf.ui.*"/>
<f:grid name="grid" height="30%" width="75%" bind="$this.list" border="1">
<@item key="no" title="Urun no" />
<@item key="ad" title="Urun adı"/>
<@item key="fiyat" title="fiyat"/>
<@item input="img" key="resim" title="Resim"/>
<@item input="link" title="Detay" url="testet.php?edit=$no"/>
</f:grid>
</faces>
</body>
</html>
<@item key="no" title="Urun no" />
<@item key="ad" title="Urun adı"/>
<@item key="fiyat" title="fiyat"/>
<@item input="img" key="resim" title="Resim"/>
<@item input="link" title="Detay" url="testet.php?edit=$no"/>