Embed v embedu s předáním bloku, jde?
- BayerMeister
- Člen | 10
Čau, zkouším zanořit do sebe {embed}
a narážím na předání bloků hlouběji. Následující příklad jsem
zjednodušil a zobecnil.
Dejme tomu mám šablonu default.latte
:
{embed 'special.latte', rows: $someSelection}
{block caption}<i class="fas fa-fw fa-comment-dollar"></i> Speciální nadpis{/block}
{/embed}
special.latte
:
{varType Nette\Database\Table\Selection $rows}
<h1>{block caption}{/block}</h1>
<p>Tuna speciální vomáčky</p>
<table>
<tr n:foreach="$rows as $r">
<td>{$r->special}</td>
</tr>
</table>
Ukázalo se, že mám ale další hodně podobné případy. Když jsem psal
3. variantu special.latte
, už bylo jasný, že společné
vyhodím do general.latte
. Tak jsem to chtěl rozdělit, to ale
možná takto nepůjde. general.latte
:
{varType Nette\Database\Table\Selection $rows}
<h1>{block caption}{/block}</h1>
<p>{block sauce}{/block}</p>
<table>
<tr n:foreach="$rows as $r">
{block tableRow}{/block}
</tr>
</table>
čímž by v každém special zbylo (nové special.latte
):
{embed 'general.latte', rows: $someSelection}
{block sauce}Tuna speciální vomáčky{/block}
{block tableRow}{$r->special}{/block}
{block caption}{include caption}{/block} {*Halt! So geht es nicht!*}
{/embed}
Blok caption
definovaný venku skrz {embed}
neprobublá. I kdyby se vnitřní caption
přejmenoval na
caption1
, aby nebyl konflikt jmen, tak neprojde
{block caption1}{include caption}{/block}
(hláška zní „Cannot
include undefined block ‚caption‘“). Můžu to zpátky zploštit, ale budu
u každého {embed 'general.latte'...
opakovat „Tunu speciální
vomáčky“ a další. Přitom proměnné se předají snado.
Předem mockrát děkuju za návrhy.
Editoval BayerMeister (13. 2. 2022 11:39)
- David Grudl
- Nette Core | 8218
Tohle uvedeným způsobem udělat nejde. Leda přidat nějaké
{include outer caption}
, které by dokázalo načítat vnější
bloky. Ale dá se to snadno vyřešit dědičností:
general.latte:
{varType Nette\Database\Table\Selection $rows}
<h1>{block caption}{/block}</h1>
<p>{block sauce}{/block}</p>
<table>
<tr n:foreach="$rows as $r">
{block tableRow}{/block}
</tr>
</table>
special.latte:
{extends 'general.latte'}
{block sauce}Tuna speciální vomáčky{/block}
{block tableRow}{$r->special}{/block}
default.latte:
{embed 'special.latte', rows: $someSelection}
{block caption}<i class="fas fa-fw fa-comment-dollar"></i> Speciální nadpis{/block}
{/embed}
- BayerMeister
- Člen | 10
Díky, nasazeno a funguje. Přímá dědičnost uvnitř {embedu} mě vůbec nenapadla.
Buď svatořečen! :-)
RgB
Editoval BayerMeister (15. 2. 2022 18:20)