Renderování šablon bez souborů a dědičnost

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

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)

Felix
Nette Core | 1245
+
0
-

Tohle mi prijde, ze to nejspis nepujde. Ty vyuzivas sablony nejakym zvlastnim zpusobem :-) To mas jako v tom $this->text ulozeny i makra, helpery a pod? Neco jako:

$text = 'Blabla bla {$a|date:'d.m.Y'}';
David Matějka
Moderator | 6445
+
0
-

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

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.