pouziti setLayout a setView

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

Chtěl bych se zeptat, jak se správně používají tyto metody.

pokouším se v jednom presenteru nastavit použití layoutu z jineho presenteru a ne a ne na to prijit.

<?php
class newPresenter{
    ...
    public function actionShow(){
        $this->setLayout('old.@layout');
    }
    ...
}
?>

a vrací mi to chybu:

<?php
Layout not found. Missing template '…/templates/New/@old.@layout.phtml'.
?>

A ne a ne prijit na to, jak ho donutit, aby si precetl …/templates/old.@layout.phtml

voda
Člen | 561
+
0
-

Třeba takhle:

<?php
$this->setLayout('../old.@layout');
?>
2bfree
Člen | 248
+
0
-

voda napsal(a):

Třeba takhle:

<?php
$this->setLayout('../old.@layout');
?>

To mě kupodivu také napadlo a to vrací

<?php
Layout not found. Missing template '…/templates/New/@../old.@layout.phtml'.
?>
voda
Člen | 561
+
0
-

Zkus ten layout pojmenovat na @old.layout.phtml.

2bfree
Člen | 248
+
0
-

voda napsal(a):

Zkus ten layout pojmenovat na @old.layout.phtml.

To jenom změní umístění zavináče v chybové zprávě

<?php
Layout not found. Missing template '…/templates/New/@../@old.layout.phtml'.
?>
Aurielle
Člen | 1281
+
0
-

Nestačilo by ti udělat si @layout.latte pro daný presenter a do něj psát {extends 'whatever/@layout.latte'}?

Editoval gmvasek (4. 2. 2011 23:14)

2bfree
Člen | 248
+
0
-

Již jsem našel řešení.

Nejprve jsem musel upravit funkci pro získání adresy layout šablon

<?php
public function formatLayoutTemplateFiles($presenter, $layout){
    return array(Nette\Environment::getVariable('appDir').DS.'templates'.DS.$layout.'.phtml');
}
?>

Pak už stačilo napsat to co jsem psal na začátku:

<?php
public function actionShow(){
    $this->setLayout('old.@layout');
}
?>
Patrik Votoček
Člen | 2221
+
0
-

pozor setLayout vždy přidá před název/cestu @ pokud ho tam nechceš budeš si muset přetížit metodu formatLayoutTemplateFiles

2bfree
Člen | 248
+
0
-

Patrik Votoček napsal(a):

pozor setLayout vždy přidá před název/cestu @ pokud ho tam nechceš budeš si muset přetížit metodu formatLayoutTemplateFiles

Nepsal jsem to úplně čirou náhodou o zprávu před tím?

Patrik Votoček
Člen | 2221
+
0
-

sorry měl jsem to otevřené asi víc jak hodinu a pak jsem odpovídal… (takže sem tu tvou zprávu neviděl) :-D