Změna adresáře šablon na základě nějaké podmínky
- knyttl
- Člen | 196
Ahoj,
nedaří se mi přijít na to, jak na základě nějaké podmínky globálně změnit adresář šablon.
Našel jsem k tomu pouze Environment::setVariable(„templatesDir“), což je deprecated. Alternativu jsem nenašel.
Díky.
EDIT: Mimochodem odkaz na Presenter API z https://doc.nette.org/…n/presenters nefunguje.
Editoval knyttr (26. 9. 2010 16:13)
- Vojtěch Dobeš
- Gold Partner | 1316
Vyřešil bych to asi přepsáním metody formatTemplateFiles
v BasePresenteru. Tam můžeš pořešit i tu podmínku, kde bych buď volal
return parent::formatTemplateFiles($presenter, $view);
anebo
prostě vrátil jiné pole možných adres šablon. Závisí to samozřejmě na
tom, o jakou podmínku jde.
- Vojtěch Dobeš
- Gold Partner | 1316
Metoda formatTemplateFiles vrací pole možných adres, kde by se měla nacházet odpovídající šablona, a Nette to pole postupně prochází a zkouší je. Přepsáním této metody si lze upravit, kde má ty šablony hledat. V tomto případě by mohlo fungovat následující řešení:
public function formatTemplateFiles($presenter, $view)
{
$domain = $this->getHttpRequest()->getUri()->getHost(); // získání domény
if ($domain === 'm.domena.cz') {
$appDir = Environment::getVariable('appDir');
$path = '/' . str_replace(':', 'Module/', $presenter);
$pathP = substr_replace($path, '/templates.m', strrpos($path, '/'), 0); // zde zadávám ten alternativní adresář
$path = substr_replace($path, '/templates.m', strrpos($path, '/'));
return array(
"$appDir$pathP/$view.phtml",
"$appDir$pathP.$view.phtml",
"$appDir$path/@global.$view.phtml",
);
}
return parent::formatTemplateFiles($presenter, $view);
}
Editoval vojtech.dobes (27. 9. 2010 23:53)
- Vojtěch Dobeš
- Gold Partner | 1316
Na to téma už se otevírá diskuze: https://forum.nette.org/…emplatefiles