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.