By Hüseyin Bora

Pager Etiketi sayfalama yapmak amacıyla kullanılır.İki farklı kullanım vardır birinci kullanım şeklinde entity niteliğine varlık sınıfının adı.
Limit niteliğine gösterilecek kayıt sayısı yazılır eğer FQL etiketinde olduğu gibi bir sonuc kümesi elde edilmek isteniyora resource niteliğine geri alınacak sounuc kümesinin adı yazılmalıdır.
Eğer php faces framework ü URI modunda kullanıyorsanız pager nesnesinin uri biçimde sayfalama oluşturması için pager etiketinin type niteliğine path değerini vermeniz gerekir.
Örnek Pager ve Grid bileşenlerinin birlikte kullanımı
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<faces>
<@import prefix="f" taglib="phpf.ui.*"/>
<@import prefix="db" taglib="phpf.db.*"/>
<f:grid id="grid" width="100%" bind="$liste" 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>
<db:pager id="pager" limit="3" entity="urun" resource="liste"
previous="Önceki" next="Sonraki"/>
</faces>
</body>
</html>
Pager etiketinin query niteliği FQL secim işleminden sonraki FQL cümlelerini kabul eder
Örnek Fiyat aralığı
<db:pager id="pager" type="path" limit="3" entity="urun" resource="liste"
query="WHERE urun.fiyat >=50 AND urun.fiyat<=100"/>
Pager bileşeninin diğer kullanımı ise veritabanı sorgularını Kontrollcü içerisinde yapıp pager bileleşenine count niteliğne toplan kayıt sayısını ve limit niteliğinede sayfada gösterilecek kayıt sayısı verilmelidir.
Örnek
Görünüm
<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="db" taglib="phpf.db.*"/>
<table border="1" align="center">
<thead>
<th>Urun NO</th>
<th>Urun Adı</th>
<th>Fiyat</th>
<th>Resim</th>
</thead>
<c:foreach var="#{$this.list}" 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>
<db:pager id="pager" limit="5" count="100"/>
</faces>
</body>
</html>
Facete Controller tarafı
<?php
import("phpf.controllers.facete");
import("dbf.persistence");
import("entity.*",true);
import("phpf.db.pager");
class Urunler extends Facete {
protected $list;
public function Urunler() {
parent::Facete();
$this->render("urunler.html");
}
public function prerender() {
$em = EntityManager::getInstance();
$query= $em->createQuery("Select count(u.no) from urun u");
$this->pager->setCount($query->execute()->getSingle());
$query= $em->createQuery("Select u from urun u GROUP BY u.no ".$this->pager->getLimitQuery());
$this->list =$query->execute()->getResultList();
}
}
?>
Pager bileşeninin QueryString den aldığı p değişkeni istenirse değiştirile bilir bunun için bilşen tanımı view dosyasında yapılırken request niteliğne işlenecek değişken adı yazılır.
<db:pager id="pager" limit="3" count="10" request="sayfa" type="path"/>
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"/>
By Hüseyin Bora
Header nesnesi FacesRenderer sınıfı faces dosyasını ayrıştırken <head> etiketi ile karşılaştığında otomatik olarak bir Header nesnesi oluştur render işleminin sonucunda da bu header nesnesini döndürür. Header nesnesi sayfanın <head> </head> aralığına ekleme yapmak için kullanılır.
Header sınıfının metotları şöyledir
- addMeta(string name, string content) görüm’e bir meta etiketi ekler
- addScript(string file) görüm’e file ile belirtilen dosya adı ile script etiketi ekler
- addLink(string file) görüm’e file ile belirtilen dosya adı ile link etiketi ekler rel=”stylesheet” type=”text/css” niteliklerini kullanır
- setTitle(string title) sayfa başlığını değiştirir
- addText(string text) text parametresini <head> </head> etiketleri arasına ekler.
Örnek
<?php
require_once ("config.php");
import("phpf.controllers.facete");
class Head extends Facete {
public function Head() {
parent::Facete();
$this->render("view.html");
}
function dugmeClicked($e) {
$head =FacesRenderer::getHeader();
$head->setTitle("Butona Tıklayınca Başlğı değiştirdim");
}
public function prerender() {
$head= FacesRenderer::getHeader();
$head->addMeta("description", "PHP Faces MVC Framework");
$head->addMeta("keywords", "PHP,ORM,MVC,AJAX");
$head->addScript("scritp.js");
$head->addLink("style.css");
}
}
Dispatcher::dispatchclass("head");
?>
Görünüm
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<faces>
<@import taglib="phpf.ui.button" prefix="f"/>
<f:button name="dugme" text="Tıkla1" onclick="actionevent"/>
</faces>
</body>
</html>
Header nesnesi
FacesRenderer sınıfı faces dosyasını ayrıştırken <head> etiketi ile karşılaştığında otomatik olarak bir Header nesnesi oluştur render işleminin sonucunda da bu header nesnesini döndürür. Header nesnesi sayfanın <head> </head> aralığına ekleme yapmak için kullanılır.
Header sınıfının metotları şöyledir
- addMeta(string name, string content) görüm’e bir meta etiketi ekler
- addScript(string file) görüm’e file ile belirtilen dosya adı ile script etiketi ekler
- addLink(string file) görüm’e file ile belirtilen dosya adı ile link etiketi ekler rel=”stylesheet” type=”text/css” niteliklerini kullanır
- setTitle(string title) sayfa başlığını değiştirir
- addText(string text) text parametresini <head> </head> etiketleri arasına ekler.
Örnek
<?php
require_once ("config.php");
import("phpf.controllers.facete");
class Head extends Facete {
public function Head() {
parent::Facete();
$this->render("view.html");
}
function dugmeClicked($e) {
$head =FacesRenderer::getHeader();
$head->setTitle("Butona Tıklayınca Başlğı değiştirdim");
}
public function prerender() {
$head= FacesRenderer::getHeader();
$head->addMeta("description", "PHP Faces MVC Framework");
$head->addMeta("keywords", "PHP,ORM,MVC,AJAX");
$head->addScript("scritp.js");
$head->addLink("style.css");
}
}
Dispatcher::dispatchclass("head");
?>
Görünüm
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<faces>
<@import taglib="phpf.ui.button" prefix="f"/>
<f:button name="dugme" text="Tıkla1" onclick="actionevent"/>
</faces>
</body>
</html>
By Hüseyin Bora
Doğrulayıcı(Validator) sınıfları durağan(static) metotları kullanan sınıflardır. işlerinizi kolaylaştırması ve yazılımın bütünleşik parçalar halinde kolektif bir yapıda çalışmasına olanak sağlar.
Bir doğrulama metodunun tanımlaması aşağıdaki gibidir
static function required(Component $c,Component $m,$message,$success)
Birinci parametre “Component $c” doğrulama işleminin yapıldığı bileşen
İkinci parametre “Component $m” mesajların yazdırılacağı bileşen
Üçüncü parametre uyarı mesajı
Dördüncü parametre doğrulama mesajı
Örneğin yeni üye kaydı için bir üye kayıt formumuzun olduğunu ve aynı ismi taşıyabilecek sadece bir üye olduğunu düşünelim.
Bunun için Uyekontrol adında bir sınıf oluşturup varmi ismini taşıyan bir doğrulama metodu ekliyorum
class uyekontrol
{
static function varmi(Component $c,Component $m,$message,$success)
{
$sorgu = EntityManager::getInstance()->createQuery("select u from uyeler u where uye.adi =:uyead");
$sorgu->bindParam("uyeadi", $c->getText);
$sorgu->execute();
$sonuc =$sorgu->getSingle();
if($sonuc!=null){
$m->setText($message);
return >true;
}
$m->setText($success);
return >true;
}
}
Şimdi oluşturduğumuz doğrulama sınıfını view (görünüm) içerisinde kullanalım
<faces>
<@import prefix="f" taglib="phpf.ui.*"/>
<f:form method="post" name="uyeform">
Uye adi :<f:textbox
name="uyeadi"
validator="uyekontrol"
rule="varmi"
success="Uye adi doğrulandı "
message=" Daha önce bu isimde bir üye kayıt olmuş farklı bir isim deneyin! "
messagefor="msgbox"
/>
<f:message id="msgbox"/>
<f:button name="kaydet" text="Gönder" onclick="actionevent" forname="uyeform"/>
</f:form>
</faces>
Validador sınıfımızı controller içerisinde import ediyoruz
import("phpf.controllers.facete");
import("dbf.persistence");
import("dogrulayicilar.uyekontrol",true);
class Controller extends Facete{
function Controller(){
parent::Facete();
$this->render("uyekayit.phpf");
}
function kaydetClicked($evt){
$uye = new uye();
$uye->adi = $this->uyeadi->text;
$uye->save();
}
}
By Hüseyin Bora
Niteliklere erişiken nesne adı -> nitelik adı şeklindendir. örneğim bir textbox birde button bileşenimiz olsun buttona tıklandığında textbox un rengini değiştirelim. faces view tanımlaması aşağıdaki gibidir.
<faces>
<@import taglib="phpf.ui.*" prefix="face"/>
<face:textbox name ="yazi" text ="Merhaba"/>
<face:textbox name ="button" text ="Rengi Değiştir"/>
</faces>
class Controller extends Facete{
function Controller(){
parent::FacesController();
$this->render("view.html");
}
function buttonClicked($evt){
$this->yazi->setProperty("style", "background:blue");
}
}
Örneğimizde textbox bileşenin style niteliğine background:blue değerini artardık ve rengini değiştirmiş olduk.
Bir niteliği değiştirmek istediğinizde
$this->bilesenadi->nitelik=”deger”;
Ya da
$this->yazi->setProperty(”nitelik”, “değer”);
İki kullanımda gecerlidir.
Şimdi örneğimizi biraz daha geliştirelim bir combobox bileşeninde renkler olsun ve seçilen rengi ajax kullanarak textbox nesnesine uygulayalım.
Örneğimiz için view aşağıdaki şekildedir.
<faces>
<@import prefix="face" taglib="phpf.ui.*"/>
<face:textbox name ="textbox" text ="Merhaba"/>
Rengi değiştir
<face:combobox name="colors"
bind="array(Aqua,Blue,AliceBlue,Beige,Black,Brown ,Navy,Pink,Red,Orange,Yellow ,White,Green)"
onchange="ajaxevent">
</face:combobox>
</faces>
import("phpf.controllers.facete");
class Style extends Facete
{
function Style()
{
parent::Facete();
$this->render("view.phpf");
}
protected function colorsChanged($evt)
{
$color = $this->colors->getSelected();
$this->textbox->setProperty("style","background:$color");
$this->AjaxResponse();
}
}
İşte Uygulamamızın Çalışır hali.