@layout pro všechny moduly

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

Zdravím,

potřeboval bych prosím poradit s načítáním @layoutu pro všechny moduly.

Struktura vypadá následovně

app/
--adminModule -- má svůj, zde je to v pořádku
--FrontedModule
--BasketModule
--config
--presenters -- zde se nachází BasePresenter
	--templates
	-@layout

V base se snažím upravit formatLayoutTemplateFiles, ale nefunguje mi to. Prosím o radu, přikládám moje nastavení:

		public function formatLayoutTemplateFiles()
{
    $layoutFiles = parent::formatLayoutTemplateFiles();
    $dir = dirname($this->getReflection()->getFileName());
    $layoutFiles[] = "$dir/presenters/templates/@layout.latte";
    return $layoutFiles;

}

Tedy pro basket,fronted module potřebuji načítat @layout co mám u BasePresenteru(presenters/templates/@layout)

Editoval mysak9 (9. 3. 2017 14:53)

David Matějka
Moderator | 6445
+
0
-

co znamena „nefunguje mi to“? ale rekl bych, ze tam mas mit jen "$dir/templates/@layout.latte";

mysak9
Člen | 18
+
0
-

Nezobrazí se vůbec nic, jako by latte vůbec nenačítalo. Načte se jen čistá stránka. Pokud pak zadám konkrétní stránku např http://localhost/…ategory/show?… tak se zobrazí pouze šablona show.latte, ale už ne @layout s headrem apod..

Cestu jak uvádíš jsem zkoušel, ale taky bez výsledku.

Martk
Člen | 661
+
+2
-

Proměnná dir vede na složku aktuálního volaného presenteru. Při akci Basket:default, kde BasketPresenter má cestu např. app/FrontModule/presenters/BasketPresenter.php obsahuje proměnná dir cestu app/FrontModule/presenters. Potřebuješ tohle (nebo si předej proměnnou s cestou appDir), pokud je tento kód v BasePresenteru:

public function formatLayoutTemplateFiles()
{
    $layoutFiles = parent::formatLayoutTemplateFiles();
    $dir = dirname($this->getReflection()->getFileName());
    $layoutFiles[] = "$dir/presenters/templates/@layout.latte";
	$layoutFiles[] = __DIR__ . "/templates/@layout.latte";
    return $layoutFiles;

}

Příště doporučuji před return dát tohle: dump($layoutFiles); porovnat s předpokládaným výstupem a hned zjistíš, kde je chyba ;)

mysak9
Člen | 18
+
0
-

@Martk Díky, funguje to :).