Filtr: Jde vrátit šablonu?
- Climber007
- Člen | 105
Ahoj,
existuje nějaká možnost, aby filtr vracel šablonu? Řekněme, že jsem strašně líný, výstup filtru je složitější HTML kód a nechci to mít nepřehledné přímo v PHP?
Díky za odpovědi
- Jan Tvrdík
- Nette guru | 2595
@Climber007 To je nesmysl, filtry (dříve helpery) jsou runtime, takže by se ten výsledek musel za běhu kompilovat a provádět přes eval. To rozhodně není dobré řešení.
- Climber007
- Člen | 105
Chci to na práci s cenou. Vložím cenu, na základě nastavení v aplikaci to bude vypisovat určité typy (s DPH, bez DPH, oboje v nějakém formátování atp.). Nebude vadit, že by těch komponent bylo na stránce třeba 30, které vlastně jen dostanou float na vstupu a vrátí nějaké pěkně naformátované číslo na základě nastavení (ať už z configu nebo databáze)? Asi je to hezčí řešení a asi ani nemá cenu řešit výkon při takovém směšném použití, že? :–D
- David Matějka
- Moderator | 6445
@JanTvrdík proc? proste vytvorim (a nasledne vykreslim) sablonu
pomoci ILatteFactory (nebo rovnou pres ITemplateFactory nebo
$presenter->createTemplate()
), takze se to spravne nacachuje a
zadny eval nebude potreba..
- David Matějka
- Moderator | 6445
@Climber007 no na tohle mi zrovna prijde vhodnejsi ten filtr (a html sestavovat pomoci Nette\Utils\Html) nez sablona..
- Jan Tvrdík
- Nette guru | 2595
Sem si to představoval tak, že tu šablonu bude nějak magicky skládat.
Jestli ji má na disku, tak může použít normální {include}
a
nemusí nic řešit.
- Climber007
- Člen | 105
Díky za rady! Už jsem to trochu přehodnotil, jak s tím. Jen ještě jedna otázka. Jak dostanu do univerzálního filteru nějakou tu factory na vytváření šablon? Resp. co předat (do konstrukturu by měla snad fungovat, když je to service)? A jaký je rozdíl mezi LatteFactory a TemplateFactory (tuhle vím, že dostanu z Application, ale co ta první)?
- Climber007
- Člen | 105
Ještě jednou díky moc, takhle mi to už dává smysl! Přijde mi to lepší než mraky komponent jen kvůli formátování ceny.
- Climber007
- Člen | 105
Zjistil jsem, že helpery jsou static a nejde jim tedy nic předat. Jde tohle nějak obejít?
- Jan Mikeš
- Člen | 771
Helpery NEMUSí být static! Filtry můžeš přidávat přímo do template např. jako anonymní funkce (přes use jim můžeš předat parametry a services jež potřebuješ). Nebo si zaregistrovat loader který může vypadat např takto – jedná se o klasickou service – zaregistrovanou v neonu a je s ní práce jako s jakoukoliv jinou službou (předávání dalších závislostí atd..)
- Climber007
- Člen | 105
Super, díky! Já to mám podle dokumentace a celé static, a na úrovni PHP vím, jen že static nevytváří instanci, ale volají se přímo.
- Jan Mikeš
- Člen | 771
@Climber007 oba odkazy co jsem posílal jsou inspirovány tímto článkem , jenom si dej pozor, protože je 3 roky starý, tak názvy tříd/metod nemusí úplně odpovídat aktuální verzi Nette.