Fun Zone = Distractie 100 %
Doriti să reactionati la acest mesaj? Creati un cont în câteva clickuri sau conectati-vă pentru a continua.

Integrarea Smarty folosind clase

In jos

Integrarea Smarty folosind clase Empty Integrarea Smarty folosind clase

Mesaj  cristiano_ronaldo Vin Mai 30, 2008 4:10 pm

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
Cod:
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.



Cod:
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.



Cod:
class VSmarty extends iView {


var $smarty;


Cod:
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:


Cod:
* 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.
cristiano_ronaldo
cristiano_ronaldo
Level 2
Level 2

masculin
Numarul mesajelor : 80
Warn :
Integrarea Smarty folosind clase Left_bar_bleue0 / 1000 / 100Integrarea Smarty folosind clase Right_bar_bleue

Puncte : 0
Reputatie : 0
Data de inscriere : 22/05/2008

Sus In jos

Sus

- Subiecte similare

 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum