Dvě složky šablon pro jeden modul?

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

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
+
0
-

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