Posílání HTML emailu – v latte sablone se promenna s html obsahem vypisuje jako string s html tagy

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

Zdravím,

vytvářím aplikaci která kontroluje obsahy stránek a při jejich změně upozorní uživatele a pošle jim čitelně zobrazené změny obsahu. Potřebuji tedy posílat html emaily, chtěl bych na to využít Nette\Mail\ a latte sablonu. Problém mám však v tom že do latte sablony pomocí $template->html = $html; potřebuji poslat string který obsahuje změny na stránce doplněný o html tagy (napr. pro odebrany text pouzivam tag del) a takto předaný string se již v šabloně neinterpretuje jako html kod ale jako string.. čili ve výsledném mailu je vidět veškerý text i s tagy. Je nějaká možnost jak docílit toho aby se string předávaný do šablony interpretoval jako html kod? Pokud nepoužívám šablonu a ten samý string dám přímo do ->setHtmlBody($template) tak vše funguje dobře. Díky za pomoc..

Editoval siberit (19. 2. 2014 9:39)

kashpi
Člen | 48
+
0
-

samozřejmě že ta možnost je :)

požívám

$body = $this->createTemplate('\Nette\Templating\Template');
$body->setSource(new FileTemplate('cesta k sablone'));
$body->html = $html;

kde

$body->html

je vlastně v té šabloně {$html}
Takže tak můžeš předat více proměnných
a pak nakonec ve vytváření Nette\Mail
použiješ

...
->setHtmlBody($body)
...
Oli
Člen | 1215
+
0
-

Nejsem si jistej, jestli jsem dobře pochopil tvůj problém, ale tohle by ti mohlo pomoct.

jiri.pudil
Nette Blogger | 1032
+
+1
-

Nebo prostě jenom v šabloně, kde ten kód vypisuješ, vypni escapování:

{$html|noescape}
siberit
Člen | 10
+
0
-

To kashpi:

Tohle vím, pokud mi tedy něco neuníká.. dělám to takto:

<?php
$template = new Nette\Templating\FileTemplate('../app/templates/Mails/notifEmail.latte');
$template->registerFilter(new Nette\Latte\Engine);
$template->registerHelperLoader('Nette\Templating\Helpers::loader');

$template->html = $html;

$mail = new Message;
    $mail->setFrom('Hlídač změn <notification@hlidaczmen.cz>') //odesilatel
    ->addTo($user["email"])  //prijemce
    ->setHtmlBody($template)  //pouzita sablona
    ->send();
?>

K proměnné $html potom v šabloně přistupuju přes {$html}

Proměnná $html obsahuje html kod.. kdyz ji však takto přidám do šablony tak ve výsledném emailu není její obsah formátovaný jako html ale jako string, kdy se zobrazují i veškeré html tagy místo toho aby to bylo naformátované.. tedy ve výsledném emailu se zobrazí např. <strong>Nejaky text</strong> místo toho aby ten text byl tučně..

To jiri.pudil:

{$html|noescape} – vyzkoušel jsem ale háže mi to: „Call to undefined method Nette\Templating\FileTemplate::noescape()“

To Oli:

Tohle mi asi nepomůže, ale děkuju..

Editoval siberit (19. 2. 2014 11:11)

Oli
Člen | 1215
+
0
-

siberit: Používáš Nette < 2.1, že? Zkus tedy {!$html}

siberit
Člen | 10
+
0
-

Oli napsal(a):

siberit: Používáš Nette < 2.1, že? Zkus tedy {!$html}

Jupí jej, takhle to funguje.. díky moc :-)