Jak generovat šablony pro email v nette 2.2
- Budry
- Člen | 88
Jediný způsob, který se mi podařilo najít je tento:
class MyService extends Object
{
private $latteEngine;
public function __construct(ILatteFactory $latteFactory)
{
$this->latteEngine = $latteFactory->create();
}
public function foo()
{
// *****
$template = new Template($this->latteEngine);
$template->setFile('');
$message = new Message();
$message->setHtmlBody($template);
// ****
}
}
Je tohle tedy správný způsob jak předat emailu vlastní šablonu?
- h4kuna
- Backer | 740
Napsal jsem si MailManager přijímá servisu nette.template takže záleží na nette co bude v pozadí.
- Tomáš Votruba
- Moderator | 1114
@duke: Napsal jsem tam odpověď
@Budry: ILatteFactory
je víceméně
bridge pro Application
. Můžeš tedy použít rovnou šablonu
presenteru. V tomto případě budeš mít šabloně pro email veškeré
filtry/makra, která máš dostupná v šabloně presenteru/komponent.
Pokud chceš použít Latte úplně samostatně (tedy bez
Application
či MVC), můžeš
Zvaž smysl tohoto řešení.
- Jan Folwarczny
- Člen | 10
@bazo:
Ahoj, já to řeším ve třídě, která vytváří maily, zhruba takto:
/**
* @var \Nextras\Application\LinkFactory
*/
private $linkFactory;
/**
* @var \Nette\Bridges\ApplicationLatte\ILatteFactory
*/
private $latteFactory;
/**
* @var Filters
*/
private $filters;
public function createMessage()
$latte = $this->latteFactory->create();
$this->filters->addTo($latte);
$template = new \Nette\Bridges\ApplicationLatte\Template($latte);
$template->linkFactory = $this->linkFactory;
$template->setFile(__DIR__ . '/sablona.latte');
$message = new \Nette\Mail\Message;
$message->setHtmlBody($template);
…
return $message;
}
V latte šabloně pro maily nepoužívám macro {link …}
, ale
{$linkFactory->link('…')}
.
Třída Filters metodou addTo($latte) přiřadí všechny latte filtry, které
v mailech potřebuju.
- newPOPE
- Člen | 648
bazo napsal(a):
ale to mi pride ako taky workaround a nie pekne riesenie. ja to riesim TemplateFactory ale potom je problem s odkazmi. Na tie mam spravenu sluzbu Linker co je vlastne taky vypreparovany router. Chcelo by to ale nejake systemove riesienie
Dovody preco je to workaround?