Jak generovat šablony pro email v nette 2.2

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

Zdravím,
mohl bych se zeptat jakým způsobem v nette 2.2 nejlépe řešit generování šablon pro emaily když FileTemplate je deprecated?

Předem díky

Editoval Budry (27. 5. 2014 10:37)

Budry
Člen | 88
+
0
-

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?

duke
Člen | 650
+
0
-

Také mě zajímá odpověď na tuto otázku, kterou jsem již také položil dříve na anglickém fóru (zde). Dosud bez uspokojivé odpovědi, takže zatím používám zavržený způsob s operátorem @.

h4kuna
Backer | 740
+
0
-

Napsal jsem si MailManager přijímá servisu nette.template takže záleží na nette co bude v pozadí.

Ukázka použití

Tomáš Votruba
Moderator | 1114
+
0
-

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

Budry
Člen | 88
+
0
-

@Tomáš Votruba vytáhnout si šablonu takto z presenteru mě nenapadlo, díky

newPOPE
Člen | 648
+
+1
-

Ja maily riesim cisto cez Eventy (kdyby\events).

Sluzba ktora maily rozposiela si pri systemovom evente onPresenter setne presenter a template vytahuje z neho.

bazo
Člen | 620
+
0
-

Ako to riesite ak nie je presenter? Napr ked sa emaily odosielaju asynchronne alebo sa nepouziva application?

Quinix
Člen | 108
+
0
-

Pro odesílání z konzole používám Kdyby/Console, kde je application i presenter pro linky dostupný…

bazo
Člen | 620
+
0
-

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

Jan Folwarczny
Člen | 10
+
+1
-

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

bazo
Člen | 620
+
0
-

hej, tak podobne to mam aj ja

newPOPE
Člen | 648
+
0
-

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?