Latte šablona v e-mailu nebere n:href

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

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
+
+1
-

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
+
0
-

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?

David Kudera
Člen | 455
+
0
-

Mělo by jen stačit do šablony registrovat ten translator, koukni sem

Azathoth
Člen | 495
+
0
-

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)

Mysteria
Člen | 797
+
+1
-

Protože to není </br> ale <br/> a Outlook narozdíl od prohlížečů ten první neakceptuje.

wwwnick
Člen | 4
+
+1
-

k te druhe otazce,
ja treba v latte sablone pro emaily pouzivam tento zpusob:
„kliknete prosim na tento <a href="{link //User:blabla $promenna}">link</a>

Azathoth
Člen | 495
+
0
-

@wwwnick Takže ten link nevytváříš v komponentě/presenteru, ale funguje to rovnou v šabloně?

David Kudera
Člen | 455
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)

F.Vesely
Člen | 369
+
0
-

Lepsi je predat si TemplateFactory viz clanek od Davida.