Filtr: Jde vrátit šablonu?

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

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

David Kudera
Člen | 455
+
+2
-

Snad chápu dobře, takže… Nejsou právě od toho komponenty?

Jan Tvrdík
Nette guru | 2595
+
0
-

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

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

Climber007
Člen | 105
+
0
-

Jasný, chápu. Tím pádem musím zvolit cestu přes komponenty viz komentář výše.

David Matějka
Moderator | 6445
+
0
-

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

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

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

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í)?

David Matějka
Moderator | 6445
+
0
-

LatteFactory vytvori Latte\Engine se spravne nastavenym tempDir, s „nejakymi“ makry, filtry apod. TemplateFactory vraci Template a dela navic tohle. Obsahlejsi odpoved je tu

Climber007
Člen | 105
+
0
-

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

Zjistil jsem, že helpery jsou static a nejde jim tedy nic předat. Jde tohle nějak obejít?

Jan Mikeš
Člen | 771
+
0
-

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

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

@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.