Společný @layout pro více modulů

- Kamil Valenta
 - Člen | 846
 
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 | 846
 
ali: ano, dědí – i v IDE se proklikám durch všemi poděděnými
David Matějka: ano

- Kamil Valenta
 - Člen | 846
 
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 | 846
 
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 | 846
 
OMG, ano. Makro {extends} tam mám. A máš pravdu, když ho zakomentuju, tak se to zavolá.

- Kamil Valenta
 - Člen | 846
 
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 | 2668
 
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)