Dědičnost šablon nebo komponenta?
- Werkov
- Člen | 17
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
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
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
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)