Předání proměnných blokům v šablonách
- mancze
- Člen | 58
Ahoj,
narazil jsem na následující užití šablon, které by snad mělo jít vyřešit elegantněji. Týká se dědičnosti:
Potřebuji mít v nadřazené šabloně (@layout.phtml) definovaný blok, který má vesměs stejnou strukturu, ale chci mít možnost na různých stránkách upravit hodnoty na některých jeho místech.
@layout.phtml:
...
{block #image}<img src="{$baseUri}images/{$filename}" width="{$width}" height="{$height}" alt="{$alt}" />{/block}
...
Nechce se mi používat globální proměnné – nezdá se mi to jako
pěkné řešení (kolize jmen, „k čemu je v šabloně tato
proměnná…?“). Navíc na některých stránkách nepotřebuji vložit
img
, ale třeba flash
, někde blok nechci
zobrazit vůbec.
Ano, aktuální řešení je možné a to vcelku pěkně:
v šablonách:
...
{extends $layout}
{block #image}{include #parent filename => "image", width => 100, height => 42}{/block}
...
Přesto si myslím, že by to šlo vyřešit elegantněji:
v šablonách:
...
{extends $layout}
{block #image filename => "image", width => 100, height => 42 /}
...
Myslím, že by to mohla být další pěkná vlastnost šablon. Samozřejmě pokud to s něčím nekoliduje – vývoj frameworku pomalu nestíhám sledovat 0:).
Pokud by se taková vlastnost měla implementovat, nebylo by navíc ku škodě mít možnost nastavit např. výchozí hodnoty v kořenové definici bloku:
@layout.phtml:
...
{block #image filename => "defaultFilename", height => 100, ...}<img src="{$baseUri}images/{$filename}" width="{$width}" height="{$height}" alt="{$alt}" />{/block}
...
Možná to šablony už podobně pěkným způsobem umí, ale jen jsem to přehlídl. V takovém případě budu rád za poučení.
- Jan Tvrdík
- Nette guru | 2595
Výchozí hodnoty lze nastavit makrem {default}
(dokumentace).
{block #image}
{default filename => "defaultFilename", height => 100, ...}
<img src="{$baseUri}images/{$filename}" width="{$width}" height="{$height}" alt="{$alt}" />
{/block}
Zápis
{block #image filename => "image", width => 100, height => 42 /}
mi přijde moc magický. Spíš bych vytvořil nové makro
{setBlockParams #imagem filename => "image", width => 100, height => 42}
,
ale do distribuce bych ho asi nezařazoval.