Problémy s Layoutem
- TanisCZ
- Člen | 80
Zdravím opět,
Takže v první řadě díky za tu předešlou odpověď. Už se začínám v Nette trošku orientovat a musím říct, že čím víc v něm zkouším, tím víc sem z něho nadšení.
Mám ještě jeden problémek :
V dokumentaci k šablonám jsem našel pasáž o využití layotu při tvorbě webové aplikace.
Dva dotazy : první, je možné pro některé stránky/presentery zakázat požití defaultního layoutu a druhá důležitější, pokud mám v layoutu nějakou proměnu, třeba {$prom}, kde můžu tuto proměnu nastavit v presenteru?
Díky moc a doufám, že moc neotravuju
- David Grudl
- Nette Core | 8218
Každý presenter může mít vlastní layout uložený v souboru
/templates/Homepage/@layout.phtml
nebo
/templates/Homepage.@layout.phtml
. Nebo se použije společný
layout uložený v /templates/@layout.phtml
.
Změnit layout jde metodou setLayout(), kde parameter NULL layout zcela
vypne, nebo lze předat název layoutu. Např. setLayout('extra')
bude místo souboru ...@layout.phtml
hledat
...@extra.phtml
.
- TanisCZ
- Člen | 80
David Grudl napsal(a):
Každý presenter může mít vlastní layout uložený v souboru
/templates/Homepage/@layout.phtml
nebo/templates/Homepage.@layout.phtml
. Nebo se použije společný layout uložený v/templates/@layout.phtml
.Změnit layout jde metodou setLayout(), kde parameter NULL layout zcela vypne, nebo lze předat název layoutu. Např.
setLayout('extra')
bude místo souboru...@layout.phtml
hledat...@extra.phtml
.
Paráda!
Nette je opravdu parádní věc a jediné co mě mrzí, že jsem ho objevil tak pozdě…-)
Díky
- Patrik Votoček
- Člen | 2221
David Grudl napsal(a):
Každý presenter může mít vlastní layout uložený v souboru
/templates/Homepage/@layout.phtml
nebo/templates/Homepage.@layout.phtml
. Nebo se použije společný layout uložený v/templates/@layout.phtml
.Změnit layout jde metodou setLayout(), kde parameter NULL layout zcela vypne, nebo lze předat název layoutu. Např.
setLayout('extra')
bude místo souboru...@layout.phtml
hledat...@extra.phtml
.
A co layout pro modul? Taky to něják jde? Nebo ho musim někde nastavit?
- soundake
- Člen | 24
vlki napsal(a):
Staci ten
@layout.phtml
mit ve slozce toho modulu. Takze napr. pro modul Admin by to bylo v%templatesDir%/AdminModule/@layout.phtml
. Viz source
Nj, ale pokud mám v modulu nějaký submodul, tak vždy musím mít
i u toho submodulu vložený @layout.phtml
, přestože je pro
všechny submoduly v modulu shodný. Tzn.
%templatesDir%/AdminModule/@layout.phtml
se nepoužije pro
%templatesDir%/AdminModule/ArticlesModule/Default.default.phtml
.
Myslím, že to jde ručně zalinkovat, ale automaticky je tato varianta
ignorována.
- soundake
- Člen | 24
phx napsal(a):
Ja jsem to resil tak, ze jsem do modulu dal soubor @layout.phtml kde je jen
{include '../@layout.phtml'}
ale pri vetsi hiearchii to asi nebude fajn reseni. Mozna by stalo upravit Nette aby kdyz neni @layout.phtml zde pouzil layout nadrazeneho atd…
JJ, to tak podobně řeším taky. I když teď uvažuju, že bych dědil nějaké ModuleBasePresenter a layout měnil tam, ale to se mi moc nelíbí.
Ohledně tý hierarchie se David tuším vyjádřil, že si nedokáže představit kde by se to dalo využít :)
- kravčo
- Člen | 721
A čo takto prepísať si metódu Presenter::formatLayoutTemplateFiles
tak, aby vracala nielen najvšeobecnejší a najkonkrétnejší layout, ale aj
všetky medzi nimi?
<?php
abstract class MyBasePresenter extends Presenter
{
protected function formatLayoutTemplateFiles($presenter, $layout)
{
...
return array(
"$root/$presenter/@$layout.phtml",
"$root/$presenter.@$layout.phtml",
"$root/$module/$submodule/$subsubmodule/$base@$layout.phtml",
"$root/$module/$submodule/$base@$layout.phtml",
"$root/$module/$base@$layout.phtml",
"$root/$base@$layout.phtml",
);
}
}
?>
Samozrejme nie takto staticky, ale parsovaním toho, čo je v
$module
; len demonštrujem, ako by mohol vyzerať výstup.