@layout → podšablona → moje šablona
- motorcb
- Člen | 552
Zdravím,
chtěl bych si rozšířit web o blog. Udělal jsem tedy BlogModule. To je
OK.
Na všech stránkách blogu bych chtěl mít jasně danou strukturu. Vlevo vždy
stejné menu, pod články vždy reklamu.
Skvělé by pro mne bylo, kdyby všechny stránky z BlogModule by se vložily
do mého blogModule.latte a ten následně do @layout.latte
@layout.latte – je pouze 1 a je pro celý web, tedy i pro blog
Jde to? Díky za tipy
- Šaman
- Člen | 2667
Jde to. To, že se hledá @layout.latte, je věcí presenteru,
konkrétně funkce formatLayoutTemplateFiles()
Když si ji přetížíš, aby se soubor hledal v adresáři daného modulu
(stejně tak si tady můžeš hledat šablonu jiného jména, to
@layout.latte není závazné, jen předdefinované), tak se načte
layout pro každý modul jiný.
A v tom načteném layoutu si můžeš zavolat {layout '@layout.latte'} a tím se celá šablona i s layoutem modulu vloží do hlavního layoutu.
Jen pozor na to, že jakmile se jednou načte layout, tak se šablona pohledu vloží do něho a dál už se případně další vkládání musí řešit v tom souboru layoutu. Tedy automaticky se ti layout modulu nevloží do layoutu aplikace. V tom layoutu modulu použij to makro.
- Šaman
- Člen | 2667
Dokonce koukám, že už to mám na GitHubu, jen pro nějakou starší verzi Nette. Neručím za to, že to půjde na první dobrou. Hledá se layout v adresáři presenteru a pak v adresáři každého předka, dokud se nenajde, nebo dokud se nedostaneme mimo aplikační namespace.
Jinak, samozřejmě, jestli ti jde o jeden jediný presenter a jeho potomky, nemusíš dělat nic univerzálního a prostě v té metodě vrátíš jediný soubor na konkrétní adrese. A ten se použije jako layout všech potomků toho presenteru.
Editoval Šaman (16. 12. 2018 0:27)