Šablony e-mailů kombinované z databáze
- RiskyNet
- Člen | 20
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.
- Filip Procházka
- Moderator | 4668
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
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)