Vložení části šablo do komponenty / Include block v komponentě

JaxP
Člen | 62
+
0
-

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 | 38
+
+1
-

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

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