Gönderen: yuxel  Son güncelleme :2010-07-02 21:09:51 Sayaç : 331912

Zend Framework'e Smarty Entegrasyonu

Zend smarty entegrasyonu


Zend Framework, polimorfik yapısı ile pek sevdiğimiz bir PHP framework. Kullandığı componentler için sağladığı interface'ler sayesinde, o component'in yaptığı işi, başka bir araç ile yapmak çok kolay oluyor.

Zend'in mevcut template engine'ini pek sevmeyebilirsiniz. Html kodu arasında <?php etiketi görmek pek tatsız olabiliyor. Zend, polimorfik yapısı ile template engine'ini istediğiniz herhangi bir template engine olarak değiştirmenize izin veriyor.

Smarty ise gönüllerde taht kurmuş, daha iyi alternatifleri varmış gibi dursa da PHP dünyasında en çok kullanılan template engine.

Bu yazıda, işini iyi yapan bu iki aracın, ortak bir şekilde nasıl kullanılacağınız anlatacağım.

Bunu yapmak için yeniden implemente etmemiz gereken component ise Zend_Controller_Action_Helper_ViewRenderer 'ı Zend_View_Abstract sınıfından türeyen kendi implemente ettiğimiz Smarty sınıfından türeyen bir obje ile değiştireceğiz.

Bunun için aşağıdaki gibi bir sınıf yazabiliriz.

<?php
/**
 * Smarty template engine sinifi
 */
class Beedon_View_Smarty extends Zend_View_Abstract
{


    /**
     * smarty objesi
     */
    private $_smarty;


    /**
     * include Smarty class and set configs
     */
    public function init() 
    {
        require_once ( "burada/smarty/yolunu/veriyoruz/Smarty.class.php" );

        $this->_smarty = new Smarty();

        //smarty ayarları
        $this->_smarty->caching         = 0;
        $this->_smarty->cache_lifetime  = 0; //bu ayarları değiştirebilrsiniz
        
        // Zend view dosyalarının yolunu set ediyoruz
        $this->_smarty->template_dir    = APPLICATION_PATH."/views/scripts"; 
        $this->_smarty->compile_dir     = "/tmp/compile"; //derlenen dosyalar
        $this->_smarty->cache_dir       = "/tmp/cache"; //template cache dosyaları
    }

    /**
     * Sayfayı smarty ile render etmeden önce
     * Zend_View'ın aldigi degiskenleri assign etmeliyiz
     */
    public function render($name)
    {
        $this->_smarty->assign($this->getVars());
        $this->_smarty->display($name);
    }

    /**
     * bu abstract methodu implemente etmeliyiz
     */
    protected function _run()
    {
    }
}

Şimdi hazırladığımız bu sınıftan türeyen bir objeyi, Zend'in view renderer'ı olarak atamak gerekiyor.

Bunun için Bootstrap.php dosyamızın run() methoduna aşağıdaki gibi satırları eklemeliyiz.


public function run()
{
        //bu isi autoloader'a da yaptırabilirsiniz
        require_once( "buraya/Beedon_View_Smarty.php/dosyasının/yolu/gelecek"); 

        //kendi view objemiz 
        $view = new Beedon_View_Smarty();

        // view renderer'ı set ediyoruz
        $viewHelper = new Zend_Controller_Action_Helper_ViewRenderer($view);        

        //view dizini icinde aranacak dosya uzantısı, ptl de yapabilirsiniz
        $viewHelper->setViewSuffix("phtml"); 

        Zend_Controller_Action_HelperBroker::addHelper($viewHelper);

        //bu islemleri yaptıktan sonra üst sınıfın run() methodunu cagirmayi unutmayın
        parent::run();
}

Artik uygulama dizinimizin icindeki view/scripts dizini içindeki dosyaları Smarty syntax'i ile kullanabiliriz.

Polimorfik yapının sağladığı güzelliklerden birisi de bu işlemlerden sonra

Controller'lar içersinde hiçbir değişiklik yapmamızın gerekmemesi.





Konular
Ben {122}
Sinema {24}
php/web {44}
Link {58}
Debian {26}
Opera {39}
Müzik {70}
KDE {7}
Qt {12}

[_lang_topics]


Takvim
<  Aralık 2024  >
PSÇPCCtPz
1
2345678
9101112131415
16171819202122
23242526272829
3031


Temalar
dx
darksight
yesilozAskerEdition
yellos
uira
default
opera
greeny
xmas
yesiloz
yesilozHtml5

Es Dost
Altan
Tuğrul
Selçuk
Timu
Mehmet
Ünal
Gökhan
Koray Taylan
Yaşar
Özgür
Orhan
Kemali
Ahmet
Emrah
Kıvanç
BilgiFrekans
Bünyamin
Bedava Site

Gez Gör Arpacık
Opera Türkiye
Uira
Ma"Cess"teleri


Projeler
Beedon
sozluQ
qPod
SourPHP
Ekşigator
Ekşigator-qt
Soccer Madness