jak vytvořit template pro email
- ansorge
- Člen | 9
Zdravím,
mam PHP 5.3 a Nette version 2.0-dev e1a3fa8 released on 2010–11–15.
Ve starší verzi Nette jsem řešil posílání emailu takto:
class eMail {
public function Send($email, $type, $subject, $param){
$template = new Template;
$template->setFile('email.phtml');
$mail = new Mail;
$mail->setFrom('...');
$mail->setHtmlBody($template);
$mail->subject = $subject;
$mail->addTo($email);
$mail->send();
}
}
Nyní v nové verzi mi nefunfuje $template = new Template; a $mail = new
Mail;.
Na netu jsem hledal a níže uvedené způsoby mi hlásí chybu: „Class
‚Nette\Templates\Template‘ not found“
$template = new \Nette\Templating\FileTemplate('email.phtml');
$template = new \Nette\Templates\Template();
Poraďte prosím kde dělám chybu.
Předem děkuji za pomoc.
- nanuqcz
- Člen | 822
Já mám podezření, že v RobotLoaderu pro Nette 2.0 bude nějaký skrytý bug. V poslední době tu na fóru bylo několik dotazů typu „Class xxx not found“, některé dodnes nevyřešené.
- Jendaaa
- Člen | 21
co takto ?
<?php
$template = $this->createTemplate();
$template->setFile($this->context->params['appDir'] . '/templates/Mail.latte');
?>
edit: nevšiml sem si že to potřebuješ mimo presenter…nicméně objekt FileTemplate mi bezproblému chodí, místo Mail je \Nette\Mail\Message
Editoval Jendaaa (20. 6. 2011 9:49)
- hAssassin
- Člen | 293
Zdravim, možná trochu offtopic, ale nemá cenu zakládat nové vlákno. A teď o co mi jde.
Konečně jsem se propracoval k odesílání emailů. Vytvořit email a
poslat ho není problém (včetně šablon). Co bych však potřeboval vědět
(spíš takové doporučení ala Best Practise) je, kam ty šablony
ukládat. Do app\templates\
nebo do app\teplates\mails
(pak bych ale nesměl mít nikde MailsPresenter
apod).
A další věc, jde nějak nastavit templatu pro maily i layout nebo bych
to musel udělat děděním šablon pres {extend}
?
- Filip Procházka
- Moderator | 4668
Best practise na to není, udělej si to jak ti to vyhovuje. Třeba takto:
app/
...
mails/
registration.latte
newpassword.latte
models/
Mailer.php
Mailer
by byla třída, která by nastavovala šablonu a
pracovala s Nette mailerem :)
- hAssassin
- Člen | 293
@HosipLan > jj diky, nakonec jsem k necemu
takovymu dosel. Ten mailer jsem zkousel resit jinak. A to tak ze sem si podedil
Nette\Mail\Message
a pro kazdy email vytvoril vlastni tridu, ktera
si nastavila sablonu a nejaky promenny do ni. Ale moc (teda vubec) se mi to
nelibi.
Ta trida Mailer
, jak pises me ted taky napadla, ale nevim jak to
presne uchopit. Spis me napadlo udelat neco jako tovarnicku, ktera by v sobe
mela metody pro jednotlive mejly a ty by se volaly z presenteru. A ta
„tovarni metoda“ by se postarala o odeslani, ale taky to neni
moc koser.
Nemohl bys trochu nastinit jak by sis tu tridu Mailer
predstavoval?
EDIT: tak sem nad tim trochu premyslel (ale jeste neimplementoval – fotbal a LM) a napadlo me neco takovyho:
Byla by trida Mailer
(nebo MailSender
nebo tak
neco), ktera by byla jako sluzba v configu a prijimala by dulezity parametry
v konstruktoru (jako napr.: cestu ke slozce se sablonama, email serveru apod.,
prekladac) a pak by mela definovanou __call
metodu, kde by prvni
parametr (cili jmeno volany metody) byl nazev sablony, druhy parametr prijemce a
treti parametr pole, ktere by se predalo do sablony jako data. Co si o tom
myslite? Kod zatim zadny nemam, ale vlastni odeslani meilu z presenteru by
vypadalo pak nejak takhle:
$this->context->mailSender->sendNewPassword($user->identity->email, array('user' => $user, ...));
Tohle by odeslalo email na email uzivatele ze sablony
newPassword.latte
a do sablony by to do promenny $user
predalo usera z presenteru (ale to je snad jasny).
Editoval hAssassin (13. 9. 2011 21:48)