Předání Presenteru do Latte
- David Zadražil
- Člen | 62
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.
- David Zadražil
- Člen | 62
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
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
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
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
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
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.