Registrace filtru definovaného v config do šablony emailu

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

Ahoj,

mám definován filtr v config.neon:

services:
    nette.latteFactory:
        setup:
            - addFilter('fooFilter`, @Filters\FooFilter)

Tento filtr se mi však automaticky neregistruje do šablony emailu:

	:
$template = new Nette\Templating\FileTemplate(ROOT . '/app/templates/Email/foo.latte');
$template->registerFilter(new Nette\Latte\Engine);
$template->registerHelperLoader('Nette\Templating\Helpers::loader');
	:

Poradíte mi prosím, jak (nejlépe a správně) do emailové šablony zaregistrovat ten fooFilter?

Jan Tvrdík
Nette guru | 2595
+
0
-

Zkoušel jsi použít tu službu nette.latteFactory, kterou konfiguruješ přes config.neon?

premek_k
Člen | 172
+
0
-

@JanTvrdík https://www.youtube.com/watch?…
Jak?

Editoval premek_k (21. 6. 2016 17:37)

premek_k
Člen | 172
+
0
-

Chlapci, poraďte mi prosím někdo. Zřejmě na tom nic není, ale nějak mi to nechce docvaknout…

David Matějka
Moderator | 6445
+
0
-

co mas za verzi nette?

Jan Tvrdík
Nette guru | 2595
+
+1
-

Zkus si přes autowiring injektnout instanci Nette\Application\UI\ITemplateFactory a pak to použiješ jako

$template = $this->templateFactory->createTemplate();
$template->setFile(__DIR__ . '/your-template.latte');
$template->render();
CZechBoY
Člen | 3608
+
0
-

A jak vytváříš ten Template teď?

premek_k
Člen | 172
+
0
-

@DavidMatějka mám verzi 2.3.0

@CZechBoY vytvářím ji tak, jak je uvedeno v mém prvním příspěvku. Je to nějaké zřejmě starší řešení (pořád však funkční), normálně to dělám dle dokumentace.

@JanTvrdík to by asi šlo, ale:

  • nevím, jak předat data do šablony
  • nevím, jak „naroubovat“ do setHtmlBody, $template->render() je void
	:
	/** @var ITemplateFactory @inject */
	public $templateFactory;

	:
	:

$message = new Nette\Mail\Message;
$mailer = new Nette\Mail\SendmailMailer;

$template = $this->templateFactory->createTemplate();
$template->setFile(ROOT . '/app/templates/Email/email.latte');

$params = [
  'foo' => 'Test',
];

$message->setFrom($from)
  ->addTo($to)
  ->setSubject($subject)
  ->setHtmlBody(??? $template->render() ???);

	$mailer->send($message);
Felix
Nette Core | 1190
+
0
-

Mail pres setHtmlBody muze prijimat template object. Jsou tam jeste nejake dalsi zadrhely? :)

premek_k
Člen | 172
+
0
-

@Felix Aha, to jsem nevěděl, to pomůže. Ještě nevím, jak do té šablony předat ty data ($params v ukázce výše).

Editoval premek_k (22. 6. 2016 20:07)

Jan Mikeš
Člen | 771
+
+3
-
/** @var ITemplateFactory @inject */
public $templateFactory;

// ...

$template = $this->templateFactory->createTemplate();
$template->setFile('templates/Email/email.latte');
$template->myVariable = "abcd"; // v sablone dostupne jako $myVariable

$message = new Nette\Mail\Message;

$message->setFrom($from)
  ->addTo($to)
  ->setSubject($subject)
  ->setHtmlBody($template);

$mailer->send($message);

Zde je ukazano jak predat data do sablony i jak predat emailu template.

premek_k
Člen | 172
+
0
-

Ježiši, ja jsem vůl!

Díky pánové. Příště se zase stavím ztrapnit.

Pěkný den všem!

Felix
Nette Core | 1190
+
+5
-

Nic se nedeje. :-) To se stava. Kdyby byl nejaky problem, tak klidne dej vedet.