Problémy s Layoutem

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

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

deric
Člen | 93
+
0
-
$this->template->prom = 'foo';
TanisCZ
Člen | 80
+
0
-

Ale z jakého presenteru?

Mám dva presentery : HomepagePresenter a ErrorPresenter

Z HomepagePresenteru mi ten postup co jsi napsal jde jen v /Templates/Homepage/default.phtml :/

TanisCZ
Člen | 80
+
0
-

Aha tak problém s přístupem vyřešen, měl jsem metodu renderDefault nastavenou jako protected…

David Grudl
Nette Core | 8218
+
0
-

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
+
0
-

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
+
0
-

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?

vlki
Člen | 218
+
0
-

Staci ten @layout.phtml mit ve slozce toho modulu. Takze napr. pro modul Admin by to bylo v %templatesDir%/AdminModule/@layout.phtml. Viz source

soundake
Člen | 24
+
0
-

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.

phx
Člen | 651
+
0
-

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…

soundake
Člen | 24
+
0
-

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
+
0
-

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.