Použití bloků v šabloně pro email – jak na to?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- zopper
- Člen | 20
Snažím se udělat organizovanou šablonu pro email, ale nedaří se mi to – pokud používám jen makra jako {$proměnná}, {plink}, atd., je to v pořádku, ale ve chvíli, kdy definuji nějaký blok, tak se mi includuje @layout pro presenter, ve kterém email vytvářím – a to samozřejmě skončí s chybou na neexistujících proměnných.
Email vytvářím takto:
$template = $this->createTemplate();
$template->setFile(__DIR__ .'/../templates/Email/email.latte');
$template->registerFilter(new Nette\Latte\Engine);
$template->params = $params;
$template->subject = $subject;
$template->pageUrl = $this->pageUrl;
$mail = new Nette\Mail\Message;
$mailer = new Nette\Mail\SmtpMailer(array(
'host' => $this->context->parameters['email']['smtp'],
'username' => $this->context->parameters['email']['username'],
'password' => $this->context->parameters['email']['password'],
'secure' => $this->context->parameters['email']['secure'],
));
$mail->setFrom($this->context->parameters['email']['from'])
->addTo($to)
->setHtmlBody($template);
$mail->setMailer($mailer);
$mail->send();
Aktuální šablona:
{block mail}
{if $neco}
Obsah bloku
{else}
Obsah 2
{/if}
{/block}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{$subject}</title>
</head>
<body>
{*include #mail*} {* nemusím to ani includovat, stačí, že je blok vytvořen *}
<p> Nějaký text....
<code>
{plink //Item:edit id=>$params['hash']}
</code>
</p>
</body>
</html>
Může mi někdo poradit, co dělám špatně?
- zopper
- Člen | 20
Díky! Než jsi napsal, tak jsem to zkusil vyřešit zazálohováním šablony z presenteru, přepsáním layoutu a šablony v něm a následně po odeslání mailu zase vrácením původních hodnot, ale nepřišlo mi to jako čisté řešení.
{layout} je přesně to makro, co jsem potřeboval, zvlášť když mu lze zadat cestu k souboru co se má jako layout použít. :-)