Vložení komponenty do šablony

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

Zdravím,

chci se zeptat jestli je možné (popř. jak) vložit komponentu do šablony.

Tj. když do @layout.latte vložím {control navbar} například, bude to fungovat?
Podle toho co vím o komponentách je nutné do presenteru přidat metodu createComponent**(), takže by to mohlo jít obejít přes BasePresenter a v šabloně mít {include něco} a blok by vypadal nějak takto:

{block menuBlock}
	{control navbar}
{/block}

Přijde mi to krkolomné, ale nic lepší mě momentálně nenapadá…

Ještě jsem to neimplementoval, spíš tak přemýšlím co dál…

Chtěl bych mít na header (navbar) a footer nějakou komponentu, protože z @layout.latte je pak nakonec soubor se stovkami řádků a není to přehledené…

Díky

Ondřej Kubíček
Člen | 494
+
+2
-

přesně tak, v BasePresenteru vytvoříš createComponentNavbar komponentu a pak ji jen v layoutu zavoláš {control navbar}, nemusíš ji ani dávat do bloku, pokud ji nechceš definovat jinde, než kde ji v layoutu zobrazíš

případně třeba si to ještě můžeš rozkouskovat do více souborů třeba footer.latte a v layoutu jen includnout {include footer.latte}, ale to mi přijde trochu zbytečné, pokud to už nepoužiješ jinde, záleží na tobě

theacastus
Člen | 81
+
0
-

@OndřejKubíček, protože chci mít footer a navbar napojený na DB a mít možnost jej nějak editovat mimo kód, rozhodně potřenuji komponentu, abych si mohl snadno předávat závislosti. Přecijen předávát si entiti manager do šablony jde narpsoto proti MVC (MVP) konceptu, kterého se nette drží :D

Ondřej Kubíček
Člen | 494
+
0
-

@theacastus chápu, klidně to můžeš mít nakombinované a tu control zavolat v tom includnutém footer, a tím jeden velký layout rozdrobíš na menší části