Předání Presenteru do Latte

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

Zdravím všechny,

mám napsané rozšíření na práci s odesíláním e-mailů. Registruji ho klasicky do DI v configu. Pak mám třídu Emailer, která dědí od Nette\Object a vní zpracováván nějaké ty šablony. No a teď potřebuji v té šabloně zpracovat makro {plink}, tak jsem si to hezky zaregistroval:

$latteEngine = new Latte\Engine();
$latteEngine->onCompile[] = function ($latte) {
        Nette\Bridges\ApplicationLatte\UIMacros::install($latte->getCompiler());
};

$this->message->setHtmlBody($latteEngine->renderToString($this->templateFile, $this->templateParameter));

Ale makro plink potřebuje ke své existenci presenter. A otázkou tedy zůstává, jak elegantně předat Presenter, aby to nebylo nijak prasácký.

Díky všem za rady.

newPOPE
Člen | 648
+
+2
-

Presenter tam nema co robit :)

Pouzi Nextras\LinkFactory ktora ti ten link vygeneruje.

David Zadražil
Člen | 62
+
0
-

Taky se mi ten postup nelíbí, proto jsem se ptal. Díky mrknu na to.

David Zadražil
Člen | 62
+
0
-

Tak Nextras/LinkFactory mi vrací prázdný string. Netuším proč, zaregistrovaný to mám, volám to takhle –

$this->linkFactory->link('Homepage:default')
Šaman
Člen | 2659
+
0
-

Nextras/LinkFactory neznám, tak to zkusím od boku – nevrací prázdný string, protože se jedná o defaultní routu? Jestli ano, tak vygeneruj absolutní odkaz ->link("//Presenter:action"). Teda, takhle to funguje v Nette, snad to bude analogické.
Resp. v mailu vždy používej absolutní odkazy.

Editoval Šaman (6. 11. 2014 14:40)

David Zadražil
Člen | 62
+
0
-

To jsem zkoušel, ale bohužel ani to nefunguje. Mělo by to vrátit alespoň lomítko ne? Nevrací to bohužel nic :-) Nenepadá tě nějaká jiná finta jak do e-mailové šablony dostat linky?

Jan Tvrdík
Nette guru | 2595
+
0
-

Jestli to vrací prázdný string, tak skoro určitě je špatně buď routování nebo cíl toho odkazu. Případně to reportuj jako bug a dořeším to s tebou na GitHubu.

David Zadražil
Člen | 62
+
0
-

Tak už jsem doma, zapomněl jsem uvést modul. Takže správně bylo –

$this->linkFactory->link('//Front:Homepage:default')

Editoval David Zadražil (6. 11. 2014 15:33)

Šaman
Člen | 2659
+
0
-

Jinak jako fintu, jak do emailové šablony dostat linky, používám template factory presenteru, nebo komponenty, která tyto emaily bude odesílat. Takže: $emailTemplate = $this->createTemplate(); a pak s ní pracuji jak jsem zvyklýz normálních šablon. Nemusím ani registrovat makra, latte, všechno tam je.