Jump to content
Dr4k3

Integrarea Smarty folosind clase

Recommended Posts

Nu am folosit niciodata Smarty, desi implementarea lui are anumite avantaje. Insa am fost nevoit: stiti cum sunt designerii. Am construit cateva clase care ma ajuta sa pornesc repede un template, fie cu Smarty, fie fara. Intotdeauna trebuie sa fii pregatit sa faci munca HTML, si nu as vrea sa ma incetinesc cu Smarty.

Am construit o clasa de baza, pe care mai apoi voi construi alte doua clase: una pentru include-uri, care va compune un template normal, si alta pentru Smarty. Aplicatia va hotari cand este cazul sa construiasca obiectul pe Smarty si cand nu. Aceasta abordare este interesanta si din punctul de vedere al optimizarii vitezei de executie: de ce sa incarci Smarty daca nu iti trebuie?

Iata clasa de baza, denumita iView.

Abstract class iView {

var $registry;

var $model;

var $action;

function __construct($model,$action){

$this->model = $model;

$this->action = $action;

parent::__construct();

if(function_exists($this->__init())) $this->__init();

}

abstract function render();

}

Templateurile mele sunt denumite in forma model_action.tpl – de aici necesitatea variabilelor $model si $action. In afara de acestea, clasa defineste alte doua functii. Prima este __init, pe care o va apela la construire, dar doar daca exista. Dupa cum vom vedea, Smarty va avea nevoie de o initializare, care se va petrece in aceasta functie. In cealalta clasa, pe care o vom apela daca nu vom folosi Smarty, nu va fi nevoie de __init().

A doua functie, render() este de tip abstract. Asta inseamna ca fiecare copil o va implementa, lucru normal, de altfel – este metoda principala a acestui grup de clase. Sa construim mai intai clasa SimpleHTML pentru cazurile In care nu vom folosi Smarty. Ea va implementa doar functia render(), care va include templateurile conform variabilelor model si action.

class VSimpleHTML extends iView {

function render(){

$this->_pageTitle = $this->model.$this->action;

if(file_exists('app/public/header.tpl')) include 'app/public/header.tpl';

if(file_exists('app/views/'.$this->model.'/'.$this->action.'.tpl'))include 'app/views/'.$this->model.'/'.$this->action.'.tpl';

if(file_exists('app/public/footer.tpl')) include 'app/public/footer.tpl';

}

}

Acestea sunt include-urile mele. Cred ca arata destul de familiar pentru a nu mai fi explicate. Acum sa trecem la clasa de smarty. Aplicatia Smarty consta intr-o serie de clase legate impreuna in smarty.class.php din directorul libs/. Aceasta clasa va trebui instantiata pentru a avea acces la Smarty. Dupa cum am spus, vom folosi functia __init() pentru acest lucru.

class VSmarty extends iView {

var $smarty;

function __init(){

require (SMARTY_DIR. 'libs/smarty.class.php');

$this->smarty = new Smarty();

$this->smarty->template_dir = MAIN_PATH.'/templates';

$this->smarty->compile_dir = MAIN_PATH.'/templates_c';

$this->smarty->config_dir = MAIN_PATH.'/configs';

$this->smarty->cache_dir = MAIN_PATH.'/cache';

}

function render(){

$this->smarty->display($this->model. '_'.$this->action.'.tpl');

}

}

La Inceput se va apela functia __init(), asa cum am definit in constructorul clasei de baza. Aici instantiem obiectul Smarty si setam caile de acces. Structura de baza a Smarty consta in patru directoare:

* templates_dir – locul templateurilor de baza (create de designer)

* compile_dir – locul templateurilor compilate – aici intra templateurile de baza impreuna cu fisierele pe care le includ

* config_dir – locul fisierelor de configurare

* cache_dir – directorul de cache

Asta este toata initializarea de care avem nevoie. Vom stoca templateurile in directorul „templates/”, numindu-le dupa conventia stabilita: model_actiune.tpl. In functie de cele doua variabile vom randa templateul In functia render() folosind functia smarty::Display.

Ati observat cele doua constante: fac viata mai usoara. Integrarea Smarty este foarte simpla in acest mod si, daca nu va convine, puteti trece imediat inapoi pe HTML simplu. Pe viitor, ati putea cu usurinta adauga o clasa care sa randeze RSS-uri sau PDF-uri. Daca aveti nelamuriri, acum avem si sectiune de comentarii, courtesy of AHAH. Poate pe viitor voi arata cum sa implementam un presenter de PDF.

Autor Vlad Fratila

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...