setLayout v Presenter
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- vlki
- Člen | 218
Osobne mi prijde dost svazujici, ze soubory layoutu nelze zmenit. Pokud mam napriklad dynamicky se generujici web, tzn. vsechny stranky jsou pod taktovkou stejneho presenteru.
Takova metoda setLayout by se pak hodila. Osobne jsem si lehce upravil metodu renderTemplate. Presneji pridal do Presenteru public promennou layout, ktere lze predat jmeno souboru. Pak mala uprava v metode formatLayoutTemplateFiles.
<?php
// Presenter.php (radek 446 az 479)
/**
* Formats layout template file names.
* @param string
* @param string
* @return array
*/
protected function formatLayoutTemplateFiles($presenter, $layout)
{
$root = Environment::getVariable('templatesDir');
$presenter = str_replace(':', 'Module/', $presenter);
$module = substr($presenter, 0, (int) strrpos($presenter, '/'));
if ($root === Environment::getVariable('presentersDir')) {
$presenter = substr_replace($presenter, '/templates/', strrpos($presenter, '/'), 0);
$module = substr_replace($module, '/templates/', strrpos($module, '/'), 0);
}
$retval = array(
"$root/$presenter/@layout.phtml",
"$root/$presenter.@layout.phtml",
"$root/$module/@layout.phtml",
"$root/@layout.phtml",
);
if ($layout !== NULL) {
$retval = array_merge(array(
"$root/$presenter/$layout.phtml",
"$root/$presenter.$layout.phtml",
"$root/$module/$layout.phtml",
"$root/$layout.phtml",
), $retval);
}
return $retval;
}
?>