PHP Faces da Ön ek ile kullanılabilir Şablonlar (Patternler)

0

Tarih : 17-11-2009 | Yazan : Hüseyin Bora | Kategori : FDL, PHP Faces

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>
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

PHP Faces Pager Etiketi ile Sayfalama (Pagination)

0

Tarih : 09-11-2009 | Yazan : Hüseyin Bora | Kategori : PHP


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"/>
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

SQL ve FQL Etiketleri

0

Tarih : 09-11-2009 | Yazan : Hüseyin Bora | Kategori : FDL, Faces ORM, PHP, PHP Faces, PHP ORM

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>
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Header Nesnesi İle View Dosyasına Başlık etiketleri eklemek

0

Tarih : 09-11-2009 | Yazan : Hüseyin Bora | Kategori : PHP, PHP Faces

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>
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

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

2

Tarih : 27-09-2009 | Yazan : Hüseyin Bora | Kategori : FDL, PHP Faces

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>

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)