setLayout v Presenter

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

Bylo by možné přidat metodu setLayout($path), která by nastavila cestu k aktuálně používanému layoutu? Nette kontroluje cestu

%templatesDir/$presenterName.layout.phtml

, to je v pořádku, jenom by to bylo dobré zmínit v manuálu… Takto by mi přišlo přehlednější.

vlki
Člen | 218
+
0
-

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;
}
?>