Dědičnost šablon napříč více moduly

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

Ahoj,

trochu bojuji s dedičností šablon napříč více moduly, prosím o pomoc. Mám více modulů aplikace a chtěl bych, aby jakákoliv šablona z jakéhokoliv modulu mohla includovat z jedné šablony. Nyní to dělám tak, že tuto vkládanou šablonu mám ve složce templates v každém modulu, což mi nepřijde moc praktické, načíst šablonu mimo aktuální modul se mi nepodařilo. Jak na to prosím? :)

Díky!

voda
Člen | 561
+
0
-

Jestli máš strukturu podle presenters, tak by mělo stačit umístit @layout.latte do app/templates.

pidiclovek
Člen | 91
+
0
-

Strukturu používám defaultní, tedy ze sandboxu aktuálního Nette, zatím nemám důvod jí měnit. Takže jestli ti dobře rozumím, měly by layouty ze všech modulů dědit už od toho základního, tedy v app/templates?

To už jsem zkoušel a nefunguje, konkrétně mám v app/templates $layout.latte:

{block #foo}
Vkládáno všude
{/block}

při použití makra include např v app/FrontModule/templates/Bar.@layout.latte tento block ale nenajde

voda
Člen | 561
+
0
-

Šablona dědí vždy jen od jednoho layoutu, takže pokud máš nějaký konkrétnější než app/templates/@layout.latte, tak se použije ten. Pokud chceš aby app/FrontModule/templates/Bar.@layout.latte dědil ještě od toho základního, tak do něj na začátek dopiš {extends ../../templates/@layout.latte}.

pidiclovek
Člen | 91
+
0
-

Tak jsem si to přesně představoval na začátku, ale takto mi to nefunguje, při dodržení výše psaného a s vložením {extends '../../templates/@layout.latte'} do layoutu, který bude dědit, mi stejně laděnka napíše: Cannot include undefined block ‚footer‘

abych předešel nejasnostem, oholený kód:
app/templates/@layout.latte

{block #foo}
Vkládáno všude
{/block}

app/FrontModule/templates/Bar.@layout.latte

<html>
...
...
{include #content}
...
{include #foo}
...

Bude to nějaká blbost pravděpodobně :) díky za pomoc!

voda
Člen | 561
+
0
-

Tak možná zkus místo extends makro {includeblock '../../templates/@layout.latte'}.

pidiclovek
Člen | 91
+
0
-

To je ono!! Super, díky za pomoc. Jen ještě dodám že v app/templates/@layout.latte jsem ještě použil místo block define, které obsah uchovává pro pozdějsí použití a hned nevykresluje.
Ještě jednou díky, už v tom mám hned pořádek.