[filetemplate] Nerendrovani sablon v mailu
- neznalek
- Člen | 60
Ahoj,
chtel bych odeslat html mail, generovani sablony pouzivam:
<?php
$template = new FileTemplate(APP_DIR . '/templates/mail/signin.phtml');
$template->link = $link;
$template->name = $name;
$template->title = 'Registrace: ' . Environment::getConfig('const')->project;
?>
Ale kdyz mi mail prijde, vyrazy {$link}
zustanou nezmeneny.
Pokud ale zavolem metodu render
sablona mailu si mi nejakym
zpusobem prida do hlavni sablony..
Jeste prilozim sablonu mailu:
<div>
Vážený uživateli,
<p>Registrace účtu byla úspěšná.</p>
<p>Prosím klikněte na níže uvedený odkaz: <a href="{$link}">aktivaci účtu</a></p>
{$name}
</div>
Jak teda sablonu vyrendrovat a jako retezec ji predat do
setHtmlBody
. Dekuji.
Nelibi se mi jeste jakym zpusobem nacitam sablonu, neda se to nejak zjednodusit?
- neznalek
- Člen | 60
Registrace filteru nic neudelala..
$template = new FileTemplate(APP_DIR . '/templates/mail/singin.phtml');
$template->registerFilter(new Nette\Templates\LatteFilter);
$template->link = $name;
$template->name = $title;
$template->title = 'Registrace: ' . Environment::getConfig('const')->project;
Zjistil jsem ze ani $template->render()
nefunguje.. a vypise
{$name} misto hodnoty promenne..
Editoval neznalek (1. 4. 2011 21:44)
- neznalek
- Člen | 60
Hmm dekuji :) uz to funguje..
Ale chova se to divne setBody
maily posila, ale pokud pouziji
setHtmlBody
email se neposle. Nevite proc?
Jeste bych rad v sablone vygeneroval odkaz na potvrzeni registrace, to delam
pomoci: {link //confirm!, 'hash' => $hash}
, hlasi mi to ze nezna
link
, ale pritom nacitam filter latte to musim jeste zvlast pridat
helper?
Editoval neznalek (2. 4. 2011 1:16)
- Jakub Lédl
- Člen | 55
Tyto proměnné se do šablony vloží automaticky, pokud ji vytvoříš
metodou createTemplate
:
<?php
$template = $this->createTemplate();
$template->setFile(...);
$mail->setHtmlBody($template);
?>
Metoda je definovaná v Nette\Application\Control
, čili ji
můžeš použít jak v presenteru, tak v controlech.
Ad přetypování na string: Pokud předáš metodě setHtmlBody
přímo objekt Nette\Templates\ITemplate
, tak to taky
funguje.
Editoval Jakub Lédl (2. 4. 2011 11:36)
- Jakub Lédl
- Člen | 55
V tom případě musíš šabloně předat presenter, jak píše gmvasek.
Jsi si jistý, že kód pro odesílání mailů patří do modelu? Nestálo by za to vyčlenit jej do nějaké mezivrstvy?
- Jakub Lédl
- Člen | 55
https://doc.nette.org/…n/presenters
Jestli jsi to už četl, tak se velmi omlouvám. V podstatě by to mělo být takto:
Předpokládám, že registrační formulář (nějaký AppForm
)
vytváříš v presenteru. Tudíž máš v presenteru určitě také nějakou
metodu jako registrationFormSubmitted
, prostě něco, co obslouží
odeslání formuláře. Při jednoduchém návrhu by v této metodě měla být
většina logiky, čili by měla obstarávat vložení dat do databáze
(přes model), vytvoření mailu a jeho odeslání.
Model by v tomto jednoduchém návrhu měl naopak pouze obstarávat vložení nového záznamu do databáze, maximálně tak generování ověřovacího kódu, který vrátí presenteru. Ve výsledku tedy:
<?php
// presenter
public function registrationFormSubmitted(AppForm $form) {
$values = $form->getValues();
// případná úprava dat, převzatých z formuláře
$code = $usersModel->insert($values); // může vracet ověřovací kód, nebo jej vytvoří presenter
$template = $this->createTemplate();
// předám položky šabloně
$mail = new Nette\Mail\Mail;
$mail->setHtmlBody($template);
$mail->send();
$this->redirect('...'); // abychom dodrželi princip Post-Redirect-Get
}
?>
Editoval Jakub Lédl (2. 4. 2011 13:37)