Vložení části šablo do komponenty / Include block v komponentě
- JaxP
- Člen | 62
Zdravím,
osobně jsem prozatím nenašel řešení, ale budu rád za každý nápad.
Mám komponentu, do které bych potřeboval vložit část šablony (popř. definovaný blok)
Příklad:
{define nejakyBlok}
<div n:foreach="$items as $item"> {* ... *} </div>
{/define}
{control nejakaKomponenta} {* <-- dosadit nejakyBlock *}
V tomto případě uvnitř komponenty {include nejakyBlock}
nejde ⇒ komponenta nevidí daný blok.
Nějaká myšlenka jak zpracovat?
Díky
- IJVo
- Člen | 39
Myslím, že je to třeba řešit na úrovni komponenty (ne na úrovni
presenteru).
Tedy ten blok nebo externí šablonu vkládat přímo do šablony
komponenty.
V dokumentaci popsáno tady:
https://latte.nette.org/cs/tags#…
https://latte.nette.org/cs/tags#…
Příklad:
Varianta A) vkládání bloku:
šablona v presenteru
{control nejakaKomponenta}
šablona komponenty (přímo v šabloně je definovaný blok, který se vkládá a je možno mu předat i parametry)
<div>
{include nejakyBlok, items => $items}
</div>
{define nejakyBlok}
<div n:foreach="$items as $item"> {* ... *} </div>
{/define}
Varianta B) vkládání externí šablony v souboru:
externisablona.latte (v šabloně je definováno to co chceme vkládat, typicky to chceme použít např. pro více komponent)
<div n:foreach="$items as $item"> {* ... *} </div>
nejakaKomponenta.php (zde je třeba v render funkci definovat cestu k externí šabloně a taky data které externí šablona používá)
public function render()
{
$this->template->externiSablona = __DIR__ . '/../neco/externisablona.latte';
$this->template->items = zde doplnit obsah items
}
nejakaKomponenta.latte
{include $externiSablona}
- JaxP
- Člen | 62
Varianta A) Bohužel nesplňuje účel ⇒ mít daný výpis řešen mimo komponentu (resp. mít alespoň možnost to přetížit)
Varianta B) Ano, tato varianta je providitelná, ale ztrací se kouzlo definování výpisu v šabloně, z které se volá (⇒ další latte soubory, další rozšíření adresářové struktury, víc bordelu :)). Nicméně to vypadá, že se budu muset touto cestou vydat.
Děkuji