Dvě složky šablon pro jeden modul?
- jEhLa
- Člen | 70
Dobrý den,
Mám šablony uloženy v:
/app/frontmodule/templates/
/app/backmodule/templates/
Každý modul má vlastní layout. Ale chci dát uživateli v BackModule
možnost si layout pro FrontModule změnit. Nerad bych však tuto změnu
zapisoval do /app/frontmodule/templates/@layout.latte.
Mám pro to vytvořenou složku: /data/templates/. Ve které pokud by se nalezla
požadovaná šablona, bude použita. Pokud ne, použije se výchozí z
/app/frontmodule/templates/.
Zkusil jsem si tedy v BasePresenteru pro FrontModule přepsat metodu formatLayoutTemplateFiles, která mi do pole umístění přidá moje požadované.
public function formatLayoutTemplateFiles(){
//funkce je napsaná dost natvrdo, jen na zkoušku
$dir = dirname(dirname(dirname(dirname($this->getReflection()->getFileName()))));
$layoutFiles = array("$dir/data/templates/@layout.latte")+parent::formatLayoutTemplateFiles();
return $layoutFiles;
}
To tedy šablonu z /data/templates/ načte, ale je problém vtom, že tento layout includuje další šablony. Ty se však následně načítají také z /data/templates/, jenže zde nejsou nalezeny, protože se nachází v původní složce /app/frontmodule/templates/.
Jak tedy docílit toho, že budu mít vlastně dvě složky šablon pro jeden modul, pokud bude šablona nalezena v /data/templates/ použije se, pokud ne, použije se /app/frontmodule/templates/.
Za jakoukoliv radu děkuji.
- jEhLa
- Člen | 70
Nikoho nic nenapadá?
Zkouším jít ještě cestou přepsat metodu includeTemplate v CoreMacros (stačilo přidat asi 3 řádky). Tím se mi to podařilo zprovoznit. Ale nelíbí se mi, že jsem musel šahat do samotného Nette. Zkusil jsem tedy podědit třídu CoreMacros která obsahovala jen upravenou metodu includeTemplate. A do config.neon přidal:
latte:
macros:
- My\Latte\Macros\CoreMacrosExtended
To však nefunguje. Vrátí to: Undefined property: stdClass::$extends.
if ($_l->extends) { ob_end_clean(); return
Nette\Latte\Macros\CoreMacros::includeTemplate($_l->extends,
get_defined_vars(), $template)->render(); }
Problém vidím vtom, že se snažím přetížit tu metodu includeTemplate.
Jak se dá tedy v Nette 2.1 přetížit výchozí macro {include}?