Jak nejlíp na DRY v šablonách
- Savannah
- Člen | 30
Řeším teď takovou věc – mam stránky a sem tam je někde fotka, která má formát něco jako
<a href="{$basePath}/images/FOTKA.jpg" rel="colorbox" title="POPIS" class="colorbox"><img src="{$basePath}/images/FOTKA_thumb.jpg" alt="POPIS" class="sth" /></a>
Což je dost kódu a tim, že to používám všude možně po stránkách, tak to musim psát pořád dokola a to se mi nelíbí. Přemýšlel jsem co s tím. Jediné, co mi fungovalo, tak bylo
{include '../img-shortcut.phtml', 'dest' => 'foto01', 'title' => 'Fotka'}
a pak šablona
<a href="{$basePath}/images/{$dest}.jpg" rel="colorbox-gal" title="{$title}" class="colorbox"><img src="{$basePath}/images/{$dest}_thumb.jpg" alt="{$title}" class='sth' /></a>
což sice funguje, ale nepřijde mi to kdovíjak krásné, navíc co fotka, to volání jednoho php include (plus musim řešit relativní cestu k dané šabloně). Radši bych, aby to šlo udělat přímo při compile-time to nahrazení. Když jsem zkoušel udělat myhelper, tak ten mi nejde pustit přímo na string:
{"foto01"|myhelper}
nic neudělá, musel bych to mí jako
{$myvar|myhelper}
Lze to vyřešit nějak elegantně? Co jsem procházel tutorialy, tak jsem nic moc nenašel (nebo jsem to přehlídnul).
Note: ty data jsou statické, přímo v .pthml je napsáno url+title fotky, neberu to z proměnné nebo tak něco.
- Ola
- Člen | 385
Šlo by použít makro, bohužel si nepamatuji, jak se makra přidávají.
Pak bys v šablonách psal {photo param1, param2, param3}
..
EDIT: https://doc.nette.org/…late-filters#…
Editoval Ola (21. 2. 2010 20:13)
- Ondřej Mirtes
- Člen | 1536
Pokud chceš vypsat a prohnat helperem něco, co nezačíná na $ (není proměnná), funguje tato syntaxe:
{* můj text *}
{="foto01"|myhelper}
{* výsledek nějaké PHP funkce *]
{=time()|myhelper}
- Mikulas Dite
- Člen | 756
Zdokumentovaného toho je zatím docela málo.
%:macroModifiers%
jsou všechny parametry:
<?php
$lf->handler->macros['test'] = '<?php test(%:macroModifiers%); ?'.'>';
?>
pro funkci function test($foo, $bar = null){...}
v template {test 'fooVal', 'barVal'}
nebo
{test 'fooVal'}
.
- Savannah
- Člen | 30
to s tim helperem je dobrý.
to macro je takhle blbý v tom, že tam mam navíc volání funkce/metody. Ale je to furt lepší jak include, jenom to neni to elegantní co bych nejradši – aby v zkompilované šabloně už bylo čisté HTML (a volání fcí/metod se prováděla v compile-time).
Každopádně oboum díky za rady (btw, Mikuláši – nevěřil bych, že dítě z tábora bude radit svému vedoucímu na programování ^^)