Dědičnost šablon nebo komponenta?

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

Ahoj, pokoušel jsem se hledat ve fóru i dokumentaci, ale nejsem z toho moudrý.

Mám vymyšlenou následující hierarchii presenterů:

BasePresenter
--ErrorPresenter
--HomepagePresenter
--PageWithMenuPresenter
----NejakaStrankaSMenuPresenter
----NejakaStrankaSJinymMenuPresenter

A následující „hierarchii“ šablon/layoutů (nejsem si jist terminologií)

hlavní layout (HTML hlavička, záhlaví stránky (logo, nadpis)
--layout s menu (použit pro Error a Homepage)
--layout bez menu (použit pro potomky PageWithMenu

A nevím, jak to implementovat v Nette.

  • dá se nějak přiřadit šablona abstraktnímu presenteru?
  • asi by to šlo udělat přes dědičnost šablon (jak je v dokumentaci psáno, že to lze dělat i víceúrovňově), ale v takovém případě nevím, jakou zvolit filestrukturu (jak presenter zjistí, kterého potomka ‚hlavního layoutu‘ použít)
  • udělat menu jako komponentu a definovat ji v layoutu do složky přímo presenteru (a nejlépe právě tomu abstraktnímu)? Ale jak potom zajistit, že každý presenter bude mít jiný obsah toho menu, načítat z modelu v render metodě?

Děkuji za odpovědi případně odkaz, který by mi toto vysvětlil.

Mesiah
Člen | 240
+
0
-

myslim ze ne, pak by nebyl abstraktní.

ale kdyz si predstavis web jako strukturu:

<div id="header"> ... </div>

	<div id="content">
	{block #content} {* tady se bude dědit v šablonách presenterů  *}
	</div>

<div id="footer"> ... </div>

tím chci říct, že v každé šabloně (btw: šablona = layout) bude html kód, ať už bude s menu nebo bez něj. Chápeš co tím chci říct? – Tam kde chceš menu, tam jej vykresliš – lepší než jej vypisovat ručně je lepší použít vykreslovatelnou komponentou – widget – menu se muze tak dynamicky menit. Btw: na menu je v Extras komponenta od pana Marka…
Proto použít ab. třídu PageWithMenu neni dobře, koukáš na aplikace z pohledu webu, ale měl by ses podivat z většího odstupu – koukej objektově. To je můj názor, neříkám, že je správný, ale tak bych to řešil já.

Pokud jsem nepochopil otázku, která imho chybí, tak se omlouvám.

Werkov
Člen | 17
+
0
-

Včera večer jsem se ještě díval na video s představením šablon a z něj je mi to o něco jasnější. Jestli to chápu dobře tak nový systém šablon se starým (tj. soubory @layout) souvisí leda tak, že se v něm jen ispiruje strukturou těch souborů, ale to který „@layout“ soubor se použije už nezávisí na presenteru (anebo default ve složce templates), ale na tom, který je uveden přímo v šabloně pro view na začátku v extends?

A můj problém terminologií toho videa je sidebar (včera jsem váhal, zda bych býval neměl napsat submenu). Chci jej však načítat dynamicky z databáze. Takže je ideální řešení komponenta?

Díval jsem se i na ten addon, ale myslím, že mě bude stačit něco jednoduššího, co mi jen umožní, abych neopakoval stejný kód.

Mesiah
Člen | 240
+
0
-

Teďka nevím, jestli Ti to řeknu správně, ale myslím, že @layout.phtml je „hlavní šablona webu“ to je asi nejvýstižnější název. Těchto šablon může být i více, třeba každý presenter nebo modul může mít vlastní.
A který @layout.phtml se vybere je na tom kam jej umístíš v adresářové struktůře (nebo to také můžeš určít v presenteru).
Když budeš mít strukturu:

/projekt
--/app
----/...
----/templates
------/modul
--------@layout.phtml
--------/Homepage
----------@layout.phtml
--------/DalsiPresenter
------@layout.phtml
--/libs
--/document_root

tak se jako výchozí například pro Homepage presenter vybere ten co je v adresari templates, pokud vyberes presenter, ktery je v modulu „modul“ vybere se ten v adresari „modul“ a pro Homepage presenter v modulu „Modul“ se vybere layout v adresari „…/templates/modul/homepage/“… Doufám, že to říkám dobře. Kažadopádně nezapomínej, že je zbytečné mít více redundantních souborů…

A pro menu je určitě lepší použít komponentu…

Editoval Mesiah (31. 8. 2010 12:23)