Kdyby Translation, chyba při načítání latte souboru

inri
Člen | 10
+
0
-

Ahoj, používáme v aplikaci Kdyby Translations, které jinak v pohodě fungují, v presenterech, formulářích i v latte šablonách. Když si ale potřebuju načíst celý latte soubor, který potom budu odesílat mailem a ve kterém mám macra s texty ve formátu {_'ui.neco'}, tak mi Tracy hlásí: Filter ‚translate‘ is not defined. Konkrétně vypisuje chybu v presenteru v Latte\Engine->renderToString()
Asi potřebuju ještě něco nadefinovat, ale netuším kde a co. Děkuji.

Šaman
Člen | 2634
+
+2
-

Bez kódu jen hádám, že to bude stejny problém, jako se řešil tady: https://forum.nette.org/…atte-e-mailu#…

inri
Člen | 10
+
0
-

Jop, díky, to pomohlo a už to chodí!:) Stačilo použít ILatteFactory a už se Kdyby chytá:) Kdyžtak mě admini smažte, ať tady zbytečně nedubluju téma, nedošlo mi, že se to řeší už vedle..

Toanir
Člen | 57
+
0
-

Ahoj, myslím si že mazat netřeba. To že se opakuje problém dokola může napovídat že může být matoucí dokumentace. Můžu se zeptat odkud jsi čerpal?

Pokud jsi vycházel z mailing dokumentace, možná je na nás přidat tam poznámku, něco ve smyslu „Pokud používáte mailing v Nette aplikaci, nevytvářejte si vlastní Latte\Engine ale použijte ILatteFactory z kontejneru viz <ukázka kódu>“

edit: Teď koukám, že tam něco v tom smyslu už psáno je, akorát je to ve spojitosti s odkazy. Možná by ta sekce „Creating links“ šla zobecnit na „Using with Nette Application“ a šlo by v ní zahrnout vytváŕení odkazů a zmínit i používání registrovaných filtrů.

Editoval Toanir (7. 4. 2020 10:00)

inri
Člen | 10
+
0
-

Ten mailing vytvářel kolega, já tam teď doplňuju překlady, takže na mailing dokumentaci mě vlastně ani nenapadlo kouknout, v tom problém nebude. Tady mě mátla ta spojitost s latte a nenapadlo mě použít LatteFacory.

Šaman
Člen | 2634
+
0
-

Ono obecně v Nette aplikacich je operátor new něco, co by se mělo používat minimálně. Běžně ho používám asi jen pro DateTime a DateInterval, výjimečně Exception a to je asi vše. Pokud používám nějaký ORM, tak se pomocí new vytváří nově vzniklé Entity.

Ale třeba i na formuláře mám službu FormFactory, která mi přidá renderer a případně translator a podobné fičurky. A stejně na tom je i LatteEngine, různé komponenty apod. Operátorem new se vytvoří čistý objekt na zelené louce. Pokud na něj někde existuje továrna, většinou ona zajistí, že ten holý objekt nastaví a připraví tak, jak jsme zvyklí.


Problém může být v tom, že dokumentace třeba k Latte musí pracovat s tím čistým objektem. Latte JE použitelné samostatně. Ale my s ním běžně pracujeme až o vrstvu výš, nikoliv na úrovni samotného šablonovacího systému (new \Latte\Engine;), ale šablonovacího systému integrovaného do Nette (\Nette\Bridges\ApplicationLatte\LatteFactory::create()). Čímž jsme se posunuli ze základního namespace Latte do Nette.

Krásně je to vidět v té továrně
Na řádku 61 je to, co dostaneme při ručním vytváření šablony a na řádku 132 je vrácená šablona se vším, co na ni navěsila továrna.

Editoval Šaman (7. 4. 2020 14:10)

inri
Člen | 10
+
0
-

Ok, díky moc za podrobné vysvětlení.

Toanir
Člen | 57
+
0
-

S rozumným balením do továren a tedy minimalizací užívání operátoru new naprosto souhlasím a sám taky provozuju, když zrovna nejsem mega línej a nedělám na něčem důležitým. :P

Co nejholejší ukázky taky dávají smysl a akorát bych doplnil že v sekci Mailing – Creating Links už je ukázka použití v ukázkový službě patřící do Nette/Application. Chtěl bych přidat zmínku o translate filtru a ostatních custom srandách nad šablonou. Myslím si že se v týhle sekci hodí odůvodnění, proč používat ITemplateFactory.

Jsem si skoro jistej, že jsem si na tomhle taky namlel čumák, když jsem začínal (s Nette) :)

Editoval Toanir (7. 4. 2020 20:42)