Použití proměnné v mailu (Nette 2.3)

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

Zdravím,

snažím se přijít na to, jak zahrnout do mailu proměnnou v textu z databáze.

Problém je v tom, že „Vaše objednávka <font color="red“> {$OrdId} </font> ....." mi v mailu sice správně obarví text na červeno, ale už nepřeloží proměnnou {$OrdId} (vypíše „{$OrdId}“ místo „10“).
Pokud text „Vaše objednávka <font color="red“> {$OrdId} </font> ....." vložím přímo do souboru test.latte, proměnnou to přeloží správně.

Máte s tím prosím někdo nějaké zkušenosti, případně tipy, jak to vyřešit?

Předem díky za jakoukoliv pomoc.

Presenter vypadá takto:

$mailDB = $this->db->query("SELECT * FROM ConfMail WHERE ConfMailid = 20")->fetch();

$params["message"] = $mailDB->ConfMailText;
$params["OrdId"] = 10;

$latte = new \Latte\Engine;
$mail = new Message;

$mail->setFrom("test@volny.cz")
     ->addTo('Lcicatka@seznam.cz')
     ->setSubject('Test')
     ->setHtmlBody($latte->renderToString(__DIR__ . '/../presenters/templates/Mail/test.latte', $params));

$mailer = new SendmailMailer;
$mailer->send($mail);

test.latte vypadá takto:

{$message |noescape}

$mailDB->ConfMailText (tedy $message) vrací:

Vaše objednávka <font color="red"> {$OrdId} </font> .....
jiri.pudil
Nette Blogger | 1032
+
+1
-

Latte ten text z proměnné prostě jen vypíše, byť bez escapování; nijak ho rekurzivně nepřekládá. Zkusil bych použít StringLoader a ten text přeložit přímo:

$latte = (new Latte\Engine())
	->setLoader(new Latte\Loaders\StringLoader());

$body = $latte->renderToString($mailDB->ConfMailText, $params);
CZechBoY
Člen | 3608
+
0
-

Případně si vyžádat ITemplateFactory a potom vyrenderovat šablonu buď přes (string)$template, nebo kombinací funkcí ob_start+ob_get_clean.

Editoval CZechBoY (13. 12. 2016 15:50)

Lcicatka
Člen | 2
+
0
-

Díky moc.

Jiřího řešení s trochou úprav funguje parádně.