Autor | Zpráva | ||
---|---|---|---|
Tori Profil |
Pěkný večer.
Vypisuju velký objem dat z DB do několika souborů, data se ještě po cestě transformují přes Smarty šablony (pro každý soubor jiná), prostě XML export. Pro úsporu paměti se data po jednom řádku vkládají do šablon a výsledek z každé šablony se připojí do odpovídajícího souboru. Momentálně mám pro každý soubor/šablonu jednu instanci Smarty (vytvořenou přes $smarty->createTemplate ) a hledám způsob, jak mít pouze jednu instanci Smarty pro n různých šablon. V dokumentaci Smarty jsem (zatím) nic takového nenašla, ale zkouším dál.
1) Je nějaký způsob, jak mít jen jednu instanci a měnit šablonu, kterou používá? Tj. místo tohoto: foreach $files as $file $templates[$file.id].assign($row) $file.addData($templates[$file.id].fetch()) foreach $files as $file $template.setTpl($file.getTplName()) $template.assign($row) $file.addData($template.fetch()) 2) Pokud by to nešlo, je možné nějak do Smarty šablony nalít data, a místo celého výsledku načíst jen jeden konkrétní blok (určený např. pomocí {capture} ). Totiž že bych pak mohla sloučit všechny šablony do jedné a jen označila jednotlivé části, a výsledný kód by pak vypadal třeba takhle:
$template.assign($row) foreach $files as $file $file.addData($template.getBlockById($file.id)) Budu ráda za případné rady. Použití Smarty je (kvůli různým pomocným funkcím a podmíněným blokům) nezbytné. |
||
Tori Profil |
#2 · Zasláno: 12. 12. 2012, 00:15:34
Ad varianta 2: Data zachycená pomocí
{capture name="nazev"} se dají číst ze statického pole Smarty::$_smarty_vars['capture'] , kde klíčem je název zachyceného bloku. Nicméně tohle pole je společné pro všechny instance Smarty, takže vidím riziko neúmyslného přepsání. Nahrazení řetězcem UID je pro mne trochu problém, protože součástí názvu bloku je ID z databáze, podle kterého pak identifikuju obsah. ... Snad budu mít někdy čas prozkoumat Smarty trochu do hloubky, možná přijdu na něco lepšího.
|
||
Časová prodleva: 11 let
|
0