Renderování šablon bez souborů a dědičnost
- mm
- Člen | 9
Ahoj,
mám v databázi uložené zdrojové kódy nějakých šablon, které pak v Nette vykresluji přibližně tímto způsobem:
public function renderWithOrder($order) {
$template = new \Nette\Templating\Template();
$template->setSource($this->text); // zdrojový kód šablony načtený z databáze
$template->registerHelperLoader('\Nette\Templating\Helpers::loader');
$template->registerFilter(new \Nette\Latte\Engine);
$template->setParameters(array(
// nějaké proměnné
));
return (string)$template;
}
Funguje to celkem dobře.
Nicméně, teď bych do toho potřeboval zakomponovat dědičnost šablon resp. použití makra layout. Rodičovskou šablonu s layoutem bych ale rád načetl zase stejným způsobem, z databáze – není uložená v žádném souboru. Nemám ale tušení, jak to udělat, jak šabloně předat layout, když nejde o soubor. Vlastně vůbec nevím, jestli to jde.
Nemáte někdo nějaký nápad? Předem díky, Martin.
Editoval mm (25. 2. 2014 17:33)
- David Matějka
- Moderator | 6445
mohlo by to jit, musel by sis ale sam napsat sve macro extends a stejne tak treba includeTemplate
nejaka jednoducha cesta v nette pro to neni :)
- mm
- Člen | 9
Felix: jo, přesně tak. Prostě mám v databázi jedné aplikace uložené šablony e-mailů, které se posílají zákazníkům v různých situacích, třeba když se změní stav objednávky. Abych mohl v šablonách využívat proměnné a nějaké podmínky, tak jsem použil Latte, a funguje to dobře, až na ten problém popsaný výše (je to teda asi prasárna, nejspíš bezpečnostní díra jak vrata, ale to teď ponechme stranou).
Každopádně nakonec to asi vyřeším tak, že prostě před vykreslením ty šablony uložím do souborů někde v tempu a je to.