Pogledajte određenu poruku
Staro 10. 04. 2007.   #5
bluesman
Goran Pilipović
Sir Write-a-Lot
 
Avatar bluesman
 
Datum učlanjenja: 18.05.2005
Lokacija: Beograd
Poruke: 5.450
Hvala: 288
1.247 "Hvala" u 446 poruka
bluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušati
Pošaljite ICQ poruku za bluesman
Default

Citat:
Originalno napisao krcko
evo sad sam malo procesljao smarty manual i upoznao se sa resource-ima

resio sam problem na sledeci nacin:
- prilikom kreiranja novog Page objekta (koji mi extenduje Smarty) registrujem novi resource 'content:'
- kada treba da prikazem stranu procitam njen 'content' i stavim ga u promenljivu ($this->content)
- pozovem display('content:' . $page['id'])
- a iz content_source funckije kao source vratim $this->content

problem mi je ovaj timestamp... sta da radim sa njim?
da li da dodam 'lastchanged' polje u tabelu ili mi to nije potrebno? (mislim da ovaj timestamp ima veze sa kesiranjem, a mozda i sa kompajliranjem, nisam bash siguran a mrzi me da nocas kopam po smartijevom kodu...)
Timestamp je obicno timestamp polje koje oznacava kada je promenjen template. Na osnovu toga smarty provaljuje da li treba ponovo da ga kompajlira ili ne.

Kod "default" sistema sa fajlovima, ako je ukljuceno $smarty->compile_check on za svaki include-ova template proverava datum i vreme poslednje izmene fajla, ako je novije od kompajliranog template - on ga kompajlira ponovo.

Kada koristis DB redources, on ne moze da provali datum izmene fajla, zato ti je potreban timestamp. Sve sto ti treba da uradis je da kad god izmenis sadrzaj template (uradis UPDATE u bazi) - da promenis i taj timestamp na UNIX_TIMESTAMP() ili NOW(). To je ako si definisao polje kao unisgned int, ali ako si definisao polje kao TIMESTAMP (procitaj mysql manual) onda je to sve automatski.

Znaci da bi koristio database kao resource moras da napravis 4 funkcije:

PHP kôd:
function get_template ($tpl_name, &$tpl_source, &$tpl_timestamp)
{
    
$tpl_source "ovde citas iz baze sadrzaj recorda kome je tpl_name = $tpl_name, kako god hoces.... mozes i iz nekog custom CMS, joomla, whatever";

    return 
true;
}

function 
get_timestamp ($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
    
$tpl_timestamp "ovde vracas samo timestamp recorda odozgo";

    return 
true;
}

function 
get_secure ($tpl_name, &$smarty_obj)
{
// all templates are secure
    
return true;
}

function 
get_trusted ($tpl_name, &$smarty_obj)
{
// this is actually not used in template
    
return true;

To generalno znaci da u tim funkcijama mozes da ubacis bilo koje funkcije bilo kog CMS-a koji ce da ti cita templates iz tvoje tabele u "izvornom" obliku

onda pozove:
PHP kôd:
$smarty->register_resource('db'
    array (
        
'get_template',
        
'get_timestamp',
        
'get_secure',
        
'get_trusted'
        
)
    ); 
i ucitas template sa

PHP kôd:
$smarty->display ('db:template_name'$cache_id); 
I smarty sam odradi compile, cache... sta god....

To isto znaci da istovremeno mozes da imas oba sistema, pa recimo cuvas header i footer u odvojenim fajlovima na disku:

PHP kôd:
$smarty->display ('header.tpl');
 
$smarty->display ('db:sadrzaj.tpl');
$smarty->display ('footer.tpl'); 
I generisace ti celu stranu kako treba, header i footer je procitao sa diska, a 'sadrzaj.tpl' iz baze.

Poslednja izmena od bluesman : 10. 04. 2007. u 13:35.
bluesman je offline   Odgovorite uz citat