Latte šablona v e-mailu nebere n:href
- Azathoth
- Člen | 495
Zdravím,
mám malý problém s posíláním e-mailu ve kterém je Latte šablona.
Šablona vypadá takto
<?php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p>
<span>{_messages.registration.body_first}</span>
<a n:href="Log:activate $activationToken">{_messages.registration.body_link}</a>
<span>{_messages.registration.body_second}</span>
</p>
</body>
</html>
?>
a při vytváření e-mailu, konkrétně
<?php
if (!$HtmlBody == NULL) {
$this->setHtmlBody($HtmlBody);
}
?>
mi to hází
Latte\CompileException
Unknown attribute n:href in …\Email\register.latte:8
Mohl by mi, prosím, někdo poradit, co dělám špatně? A proč nemohu na
vytvoření odkazu použít n:href, které mi jinde na stránkách funguje
dobře?
Budu vděčný za každou odpověď.
- David Kudera
- Člen | 455
Odkaz si vytvoř ručně v presenteru nebo v komponentně nebo kde ten mail vytváříš a té šabloně ho jen předej a vykresli. Jo a ten link musí být absolutní, takže 2 lomítka na začátek.
$template->activateLink = $presenter->link('//Log:activate', array($activationToken));
Ta šablona je tak trochu „samostatná“ a „čistá“ a nemá všechny makra a proměnný, co klasická šablona, kterou vytvoří a používá presenter
- Azathoth
- Člen | 495
Děkuji, po zápolení se mi podařilo rozchodit link, ale mám jednu drobnou
otázku: jak je to s translatorem v tomto schématu? Ten to také neumí?
Používám Kdyby Translate a nastavuji jej v při vytváření template
takto:
$template->activateLink = $link;
samotné použití v šabloně je vidět výše. Dělám něco špatně nebo
šablona mimo presenter neumí pracovat ani s translatorem?
- Azathoth
- Člen | 495
Bohužel to nepomohlo, nakonec jsem to vyřešil tím, že jsem v šabloně definoval proměnné a proměnné jsem naplnil překladem z Kdyby/Translation. Zkoušel jsem registrovat podle návodu, ale nic, aspoň to jde obejít tím přeložením v modelu. No, já každopádně děkuji za pomoc, ale měl bych k tomu dvě otázky:
teď to vypadá v té šabloně takhle:
{$bodyFirst}</br>
{$activateLink}</br>
{$bodySecond}</br>
Proč, když si ten e-mail otevřu v outlooku, nevidím link a druhou část textu na novém řádku, i když je na konci řádku </br>?
A druhá otázka je: když je link v šabloně v podobě {$activateLink} a
u přípravy schématu mám
$template->activateLink = $link; a někde předtím je $link =
$this->link(‚//Log:activation‘, array('')); (prázdné pole je
záměrně, parametr plním v modelu později)
Mohu nějak udělat link, který bude vypadat tak, že ten odkaz bude mít
jiný nápis než text, na který odkaz odkazuje? Když chci, aby v tom e-mailu
bylo
Klikněte, prosím, na tento link
místo toho, co je tam teď: Klikněte, prosím, na tento link http://localhost/…4djvv1cnhmgp
Editoval Azathoth (13. 8. 2014 22:00)
- David Kudera
- Člen | 455
To by fungovalo až po tom, co šabloně předáš ručně $presenter, $_presenter nebo $_control.. Teď si přesně nepamatuju. Odkazy se totiž vytváří přes presenter a pokud tam není, tak je nemá kdo vytvořit.
Třeba já mám rozšířenou třídu message, aby se o tyhle věci postarala, takže taky tvořím tak, ale nechtěl jsem tě tím zatěžovat
Tohle se mi tam volá vždy automaticky:
$template->presenter = $template->_presenter = $template->_control = $this->application->presenter
A application je injectnutý pomocí di.. Mám vlastně na maily generovanou továrničku a s tím je to pohodlný pak
Editoval David Kudera (14. 8. 2014 18:55)
- wwwnick
- Člen | 4
no ja teda $presenter sablone nepredavam a i tak to funguje, createTemplate to tam musi nejak predavat automaticky, cely kod na posilani emailu:
<?php
$template = $this->createTemplate();
$template->setFile(__DIR__.'/../templates/Homepage/email.latte');
$template->promenna=$data;
$mail = new Message;
$mail->setFrom('bla@bla.cz')
->addTo($email)
->setHtmlBody($template);
$mailer = new SendmailMailer;
$mailer->send($mail);
?>
Editoval wwwnick (17. 8. 2014 13:46)
- David Kudera
- Člen | 455
Jo tak pokud to takhle vytváříš z presenteru tak jo.. vytvoří to vlastně šablonu vhodnou pro presenter.. zapomněl jsem tam dodat, že se týká toho, když to mám někde bokem a vytvářím šablonu nějak ručně ;-)
Edit: tak mě napadá, že to asi taky tak předělám nejspíš..
Editoval David Kudera (17. 8. 2014 15:09)
- Tomáš Pilař
- Člen | 14
Zrovna jsem hledal, jak do Latte šablony, kterou použiju jako body v emailu povolím makra link a plink + nastavím překlad textů šablon přes Kdyby/Translation. Nebylo to nic složitého, ale třeba někomu ušetřím zbytečné hledání a zkoušení, když se o to podělím.
<?php
class EmailSender
{
/**
* @var Latte\Engine
*/
private $latte;
public function __construct(IMailer $mailer, Kdyby\Translation\ITranslator $translator)
{
$this->latte = new Latte\Engine;
$this->mailer = $mailer;
Nette\Bridges\ApplicationLatte\UIMacros::install($this->latte->getCompiler());
Kdyby\Translation\Latte\TranslateMacros::install($this->latte->getCompiler());
$translator->createTemplateHelpers()->register($this->latte);
}
public function send(array $params)
{
$body = $this->latte->renderToString(__DIR__ . '/templates/lostPassword.latte', $params);
$message = (new Message)->setFrom('no-reply@domain.com')
->addTo('recepient@domain.com')
->setHtmlBody($body);
$this->mailer->send($message);
}
}
?>
Editoval nethry (19. 7. 2015 13:51)