Společný @layout pro více modulů
- Kamil Valenta
- Člen | 815
Ahoj,
potřeboval bych mít pro více modulů společnou
šablonu @layout.latte
Intuitivně jsem si v abstraktním BasePresenteru přepsal metodu
public function formatLayoutTemplateFiles()
tak, aby mi krom nativních cest vracela i cestu moji. Výsledné pole je
v pořádku,
má cesta je na prvním indexu.
Problém je, že se ta metoda nezavolá. Když do ní dám
dump(‚called‘); exit;
tak se nic nestane.
Zkusil jsem tu metodu přepsat v konečném neabstraktním presenteru, který z BasePresenter dědí, ale ani tak se metoda formatLayoutTemplateFiles() nezavolala.
Když jsem hledal v diskuzích, všude se odkazují jen na přepsání této metody.
OK. Zkusil jsem si dát dump a exit přímo do Nette\Application\UI\Presenter
→ formatLayoutTemplateFiles().
Ani teď se nic nevypsalo a nestoplo :(
- Kamil Valenta
- Člen | 815
ali: ano, dědí – i v IDE se proklikám durch všemi poděděnými
David Matějka: ano
- Kamil Valenta
- Člen | 815
Kdyby to tak bylo, tak by se vykonal dump a exit obsažený v té poděděné.
OK. Vyhledal jsem všechny výskyty mimo vendor, našel jsem 1, zakomentoval. Zůstává poslední výskyt v Nette\App\UI\Presenter, nechávám tam dump a exit.
Vyvolám požadavek na presenter, vykreslí se jeho šablona, která má obsah v {block content}.
Na žádný @layout.latte se nesáhlo, dump a exit neproběhl…
Editoval kamil_v (7. 2. 2018 13:44)
- Kamil Valenta
- Člen | 815
Jo, i to jsem kontroloval, ten App\UI\Presenter si otevřu přímo na FTP a dump s exitem tam vidím.
No to mi povídej, že je to divný, zasekl jsem se na tom už na několik hodin…
- Kamil Valenta
- Člen | 815
OMG, ano. Makro {extends} tam mám. A máš pravdu, když ho zakomentuju, tak se to zavolá.
- Kamil Valenta
- Člen | 815
Jenže nevím, jak se obejít bez makra {extends}.
Jde mi o to, že mám řekněme takovou strukturu presenterů:
- BasePresenter extend \Nette\App\UI\Presenter
- Some1Presenter extend BasePresenter
- Some2Presenter extend BasePresenter
- SomeSpecific1Presenter extend Some1Presenter
- SomeSpecific2Presenter extend Some2Presenter
A velice podobně jsem chtěl mít i šablony:
- presenters/templates/Some1/default.latte – obsahující náplň do {block content}
- presenters/templates/SomeSpecific1/default.latte – obsahující {extends ‚../Some1/default.latte‘} a doplňující nějaké bloky, nebo nedoplňující nic…
Celé to pak mělo být zapuštěno do patřičné @layout.latte, která by se řídila z $this->setLayout();
Editoval kamil_v (7. 2. 2018 14:17)
- Šaman
- Člen | 2659
Každá koncová šablona musí vědět, kam patří. Ale to extendováni
může být několikanásobné.
Takže můžeš mít {extends someSpecificLayout}
, který sám
{extends @layout.latte}
.
Anebo to nastavit v render metodě (->setLayout()
), pak
můžeš vybírat i podle nějaké složitější logiky.
Editoval Šaman (8. 2. 2018 13:03)