Jak nejlíp na DRY v šablonách

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Savannah
Člen | 30
+
0
-

Ř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
+
0
-

Š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)

Savannah
Člen | 30
+
0
-

Jop, tohle by mohlo být přesně co chci. Ale – je to někde pořádně zdokumentované? Jak přistupuju k parametrům? (%% vypadá, že to je, ale co pořadí parametrů? Použití jednoho parametru na 2 místech? Nepovinné parametry?)

Ondřej Mirtes
Člen | 1536
+
0
-

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
+
0
-

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
+
0
-

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í ^^)