Kas

9

PHP Faces Pager Etiketi ile Sayfalama (Pagination)

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"/>

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>

Eki

20

Varlık sınıfı oluşturucu (Entity Generator) programı

By Hüseyin Bora

Varlık sınıflarını kendiniz yazmak zorunda değilsiniz siz sadece veritabanınızı tasarlayın bu program varlık sınıflarını sizin için oluşturacaktır. Ancak tablolar arasıdaki ilişkileri tablolarınızı oluştururken tanımlayım bu program ilişkileri tanır.

http://php-faces.googlecode.com/files/generator.zip programı bu adresten indirebilirsinin unutmadan programın çalışabilmesi için sisteminizde JVM bulunmalı! generator.jar isimli dosyayı çalıştırdığınızda kaşınıza aşağıdaki gibi bir pencere gelecek buradan gerekli ayarlamaları yapıp generate butonuna basın ve varlık sınıflarının kayıt edileceği dizini secin. Bundan sonra PHP faces entity generator programının sizin için nasıl PHP kodladığını görün.

Eki

16

PHP ORM Tekbaşına kullanımı

By Hüseyin Bora

PHP ORM

PHP Faces ORM tek başına kullanabilirsiniz bunun için öncelikle aşağıdaki adresten ORM çatısını indirin. İlgili dosyaları bir dizine çıkarın ve kullanacağınız sunucuya taşıyın.

PHP ORM indir.

Yapılandırma

PHP ini dosyanızdan aşağıdaki eklentilerin kullanılabilir halde düzenleyin
extension = pdo.so
extension = pdo_sqlite.so
extension = sqlite.so
extension = pdo_mysql.so
Bir yapılandırma dosyası hazırlayın örneğin config.php dosyası olabilir

Örnek yapılandırma dosyası

define("DB_CONNECTION_STRING","mysql:host=localhost;dbname=faces");//sunucunuz ve veritabanı adı
define("DB_USER","root");//veritabanı kullanıcı adı
define("DB_PASS","abc345");
define("DB_CONNECTOR","PDO");//bu satırı değiştirmeyin
>require_once "facespersistence/persistence.php";// PHP ORM Persistence kütüphanesi

ORM katmanını kullanmak istediğimiz php dosyalarında yukarıda oluşturduğumuz config.php dosyasını çağırmamız gerekecek.

require_once “config.php”;

Bir örnekle açıklamaya çalışalım aşağıdaki gibi bir varlık sınıfımız models klasöründe kayıtlu bulunsun olsun.

/**
*  @Table(name = "urun")
*/
class Urun extends Entity
{
/**
* @Id
* @Column(name = "no")
*/

private $no;
/**
* @Column(name = "ad")
*/

private $ad;
/**
* @Column(name = "fiyat")
*/

private $fiyat;
function get($name) {

return $this->$name;
}
function set($name,$value) {
$this->$name = $value;
}
}

Faces ORM ile birlikte importmodels(”models”); fonksiyonu gelmekte aşağıdaki örneği inceleyin.


require_once "config.php";
importmodels("models");
$session = EntityManager::getInstance();
$query =$session->createQuery("select u from Urun u where u.no=10");
$query->execute();
$urunler =$query->getSingle();
echo "<pre>";
print_r($urunler);
echo "</pre>";
$urun = new Urun();
$elma->ad= "Elma";
$elma->fiyat="11.23";
$session->save($elma);

Eyl

26

Doğrulama Sınıfları (Kendi Doğrulayıcılarınız)

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);//uygulama dizini

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();
}
}