Šablony e-mailů kombinované z databáze

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

Zdravím komunitu,

měl bych dotaz ohledně možnosti posílání e-mailu z šablon které se skládají z databáze. Na foru jsem hledal, ale nepovedlo se mi najít nic aktuálního k tématu.

Jde o to, že mám v jedné tabulce společnou hlavičku a patičku (layout) a v jiné tabulce šablony obsahu (content). Nemůžu ale přijít na to jak je zkombinovat.

V layoutu nemůžu použít include, protože {include „filename“} podporuje pouze FileTemplate. FileTemplate použít nemůžu, protože ten chce cestu k souboru s šablonou. Mohl by mě někdo navést, jak toto zprovoznit?

Jediné co funguje je použití new \Nette\Templating\Template a klasického setSource() a předat mu obě šablony jen jako holé HTML, ovšem tam nemůžu použít head a body tagy a lepit k tomu ještě hlavičku a patičku mi taky nepřijde zrovna ideální.

Díky za každý nápad.

jtousek
Člen | 951
+
0
-

Nemohl bys každou část zkompilovat jako samostatnou šablonu a spojit až výstupy?

Filip Procházka
Moderator | 4668
+
0
-

Já to řeším tak, že šablony mám klasicky v databázi, u každé je informace o tom, jestli něco rozšiřuje a pak je ukládám jako .latte soubory do cache. Tyhle soubory pak už můžu nastavit čemu chci :)

$template = new TemplateSource("...šablona...");
$template->setExtends(new TemplateSource("...šablona..."));

// uložím
$dbTemplates->save($template);

// vytáhnu si cestu
$file = $dbTemplates->find(1);

// a nastavím šabloně
$template = new Nette\Templates\FileTemplate($file);

->find() mi samo vytáhne šablonu z databáze, pokud neexistuje odpovídající soubor v cachi, tak to tam z databáze vloží, pokud šablona něco rozšiřuje, tak na začátek přidá {extends ..layout..} a vytáhne si tu šablonu, kterou rozšiřuje, zase ji uloží, vrácenou cestu nastaví jako ten {extends} a pak k tomuhle celému mi to vrátí cestu.

Díky tomu, že se ptám vždy na konkrétní ID šablony, můžu tohle celé cachovat a mám automaticky-se-invalidující šablony v databázi/cachi a když není potřeba, na databázi ani nesahám. :)

https://github.com/…by/Templates

Editoval HosipLan (13. 5. 2012 12:44)

RiskyNet
Člen | 20
+
0
-

jtousek napsal(a):

Nemohl bys každou část zkompilovat jako samostatnou šablonu a spojit až výstupy?

Zkoušel jsem, ovšem to zase hlásí chybu už generování toho „layoutu“ s tím include.

Ale zřejmě jsem to obešel, prakticky vlastně jak popisuješ. Vygeneroval jsem nejdříve „šablonu“ obsahu a tu jsem předal jako proměnnou tomu layoutu. Tu proměnnou jen v layoutu vypíšu. Zdá se že to funguje, možná ne ideální ale snad funkční.

Díky za poštouchnutí

Editoval RiskyNet (13. 5. 2012 13:06)

RiskyNet
Člen | 20
+
0
-

HosipLan napsal(a):

Já to řeším tak, že šablony mám klasicky v databázi, u každé je informace o tom, jestli něco rozšiřuje a pak je ukládám jako .latte soubory do cache. Tyhle soubory pak už můžu nastavit čemu chci :)

Taky zajímavá myšlenka, mrknu na to díky :)