[2009–06–15|25ac85f] Nette\Mail – odesílání emailů
- David Grudl
- Nette Core | 8218
Nette Framework má novou třídu pro odesílání emailů
Nette\Mail\Mail
.
Příklad použití:
$mail = new Mail;
$mail->setFrom('Franta <franta@example.com>');
// nebo $mail->setFrom('franta@example.com', 'Franta');
$mail->addTo('petr@example.com');
$mail->setSubject('Potvrzení objednávky');
$mail->setBody("Dobrý den,\nvaše objednávka byla přijata.");
$mail->send();
Můžete využít i fluent interface:
$mail->setFrom('Franta <franta@example.com>')->addTo('petr@example.com')->send();
Do emailu lze vkládat přílohy:
$mail->addAttachment('example.zip');
Je také možné odesílat HTML emaily:
$mail->setHTMLBody('<b>Sample HTML</b> <img src="background.gif">');
Vložené obrázky lze do emailu vkládat metodou
$mail->addEmbeddedFile('background.gif')
, nicméně není to
potřeba. Nette automaticky vyhledá a vloží všechny soubory odkazované
v HTML kódu. Toto chování lze vypnout uvedením FALSE jako druhého
parameteru metody setHtmlBody()
.
Pokud HTML email nemá textovou alternativu, bude vygenerována automaticky.
Pokud HTML email nemá nastavený subjekt, bude vzat z elementu
<title>
.
Třídu Mail lze dobře kombinovat se šablonama:
$template = new Template;
$template->setFile('email.phtml');
$mail = new Mail;
$mail->setFrom('Franta <franta@example.com>');
$mail->addTo('petr@example.com');
$mail->setHtmlBody($template); // nebo $mail->setBody($template) pro textovou šablonu
$mail->send();
Do šablony bude automaticky vložená proměnná $mail
, je tedy
možné přímo v šabloně nastavit další hlavičky emailu.
Samotné odesílání emailů obstarává mailer, tím výchozím je SendmailMailer používající PHP funkci mail(). SmtpMailer pro odesílání přes SMTP server je v přípravě.
- Honza Marek
- Člen | 1664
vrtak-cz napsal(a):
A jak je to s
plink
,link
atd. makrama vCurlyBracketsFilter
-u ???
Když šablonu vyrobíš v prezenteru pomocí $this->createTemplate(), tak o tyhle věci nemusíš mít starost.
- Honza Marek
- Člen | 1664
cuga napsal(a):
bude mail pridan i do 0.8 verze, nebo mam pro posilani misto stable verze pouzivat devel verzi???
Jinak samozrejme diky za mail, ten chybel :)
Bude stačit, pokud si zkopíruješ složku Mail z development verze do té stable.
- xzajic
- Člen | 19
Já bych měl prosbu. Pochopil jsem pohledem do zdrojáku, že Nette\Mail je až od verze 0.9. Nedalo by se to (tučně, výrazně, červeně, pro blbce) uvést do Průvodce programátora (https://doc.nette.org/cs/mail) Kdž si jako nováček stáhnu doporučenou verzi (0.8) a vyzkouším si odeslání e-mailu, tak to nebude fungovat ;-)
- Tomik
- Nette Evangelist | 485
xzajic napsal(a):
Já bych měl prosbu. Pochopil jsem pohledem do zdrojáku, že Nette\Mail je až od verze 0.9. Nedalo by se to (tučně, výrazně, červeně, pro blbce) uvést do Průvodce programátora (https://doc.nette.org/cs/mail) Kdž si jako nováček stáhnu doporučenou verzi (0.8) a vyzkouším si odeslání e-mailu, tak to nebude fungovat ;-)
Je to tam, jen otázka, zda to dát jako tip nebo upozornění, zatím jsem to dal jako upozornění, páč je to docela důležitá informace… Ale zase to vypadá, jak nějaká chyba. :)
- Roman Pištěk
- Člen | 10
Nette\Mail\Mail.php, řádek 423: V reguláru asi chybí ungreedy
modifikátor (bez něj je v $matches vše až po poslední uvozovku v <img
/>).
Jinak dobrá práce!
- Jakub Šulák
- Člen | 222
Hlásím „asi bug“:
Subject se nastavuje automaticky z <title>.
Pokud je však v title {$abc}, tak se asi nevyhodnotí, nebo se každopádně
poruší hlavička mailu.
- LeonardoCA
- Člen | 296
Taky mám menší problém, MS Outlook 2007 po zaslání html mailu zobrazí nejdříve plain text a pak html kód jako plain text. Zkoušel jsem zaslat stejný mail s jednoduchou třídou, kterou jsem si psal v únoru a jediný zásadní rozdíl ve výstupech který jsem našel je, že má třída posílá plain text i po ‚Content-Type: multipart/alternative;‘. To jsem někde vyčetl na netu a tuším, že i google mail formátuje odchozí zprávy podobně.
Moje původní řešení, které MS Outlook přelouská správně vypadá takto:
// message
$body_html = $this->body;
$body_plain = $body_simple = strip_tags($body_html);
$boundary = md5(uniqid(time()));
//headers
$headers = 'From: '.$this->from."\n";
$headers .= 'To: '.$toList."\n";
$headers .= 'Return-Path: '.$this->email."\n";
$headers .= 'MIME-Version: 1.0' ."\n";
$headers .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '"' . "\n\n";
$headers .= $body_simple . "\n";
$headers .= '--' . $boundary . "\n";
$headers .= 'Content-Type: text/plain; charset=UTF-8' ."\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
$headers .= $body_plain . "\n";
$headers .= '--' . $boundary . "\n";
$headers .= 'Content-Type: text/HTML; charset=UTF-8' ."\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
$headers .= $body_html . "\n";
$headers .= '--' . $boundary . "--\n";
return mail('',$subject,'',$headers);
Nemám teď čas studovat detaily, ale třeba bude někdo vědět víc …
- David Grudl
- Nette Core | 8218
Jakub Šulák napsal(a):
Hlásím „asi bug“:
Subject se nastavuje automaticky z <title>.
Pokud je však v title {$abc}, tak se asi nevyhodnotí, nebo se každopádně poruší hlavička mailu.
Chtělo by to podrobnější report…
- David Grudl
- Nette Core | 8218
LeonardoCA napsal(a):
Taky mám menší problém, MS Outlook 2007 po zaslání html mailu zobrazí nejdříve plain text a pak html kód jako plain text. Zkoušel jsem zaslat stejný mail s jednoduchou třídou, kterou jsem si psal v únoru a jediný zásadní rozdíl ve výstupech který jsem našel je, že má třída posílá plain text i po ‚Content-Type: multipart/alternative;‘. To jsem někde vyčetl na netu a tuším, že i google mail formátuje odchozí zprávy podobně.
Zkus prosím nahradit v souboru Mail.php řádek
$mail->setBody(NULL);
za
$mail->setEncoding(self::ENCODING_8BIT);
a vyzkoušej, jestli to
pomůže.
- krteczek_
- Člen | 1
Jen bych rád připomenul pro ty, kteří dumají nad tím, proč se jim nevypisují obsahy proměnných do templatů při generování emailů, že je nutno registrovat patřičné filtr(y) [ne každý generuje templaty pro mail v presenteru];)
Malý příklad metody:
<?php
public static function sendRegistrationMail($invoke, $email) {
try {
$mail = new NMail();
//Nastavíme template
$tpl = new NTemplate();
// registrace filtru
$tpl->registerFilter('Nette\Templates\NCurlyBracketsFilter::invoke');
$tpl->setFile(APP_DIR."/templates/Mails/sendRegistrationMail.phtml");
$mail->setFrom(MAIL_FROM); // od
$mail->addTo($email); // komu
$tpl->title = $invoke->texts['regMailTitle'];
$tpl->contents = $invoke->texts['regMailContents'];
$mail->setSubject($invoke->texts['regMailTitle']);
$mail->setHtmlBody($tpl);
$mail->send();
return true;
} catch(InvalidStateException $err) {
return $err;
}
}
?>
- PetrP
- Člen | 587
xzajic napsal(a):
generuji templaty pro mail v presenteru a stejně musím registrovat filtry a helpery. Nevím, jestli je to chyba nebo vlastnost, ale bez toho to nejede.
Mužeš si ho vytvářet přes $presenter->createTemplate()
a
budeš tam mít stejné filtry jako v presenteru. (Tedy jestli si přidáváš
filtry správně v templatePrepareFilters a né třeba v startupu). Ještě by
si mohl i (clone) $this->template
(budou tam i parametry které
si do té doby přidal; musíš udělat před renderováním)
- Ondřej Mirtes
- Člen | 1536
Napsal jsem mírně propagační článek Dokonalý kontaktní formulář za 10 minut :)
- Ondřej Mirtes
- Člen | 1536
redhead napsal(a):
hezký návod, jen pár otázek:
- proč setuješ flash message po redirectu? Tam by se kód po volání redirect neměl dostat.
- na co je proměnná $req v sendMail metodě? Není nikde využita.
- Sorry, má to být samozřejmě prohozené.
- Pozůstatek z doby, kdy jsem do šablony házel i všelijaké info o uživateli (user-agent, IP adresa, hostname…).
Oboje jsem opravil.
- Ondřej Mirtes
- Člen | 1536
Dnes jsem to pustil na „ostrou“ e-mailovou adresu a zpráva prý přišla (do Outlook Express) v takovéto podobě:
=?UTF-8?Q?=20formul=C3=A1ra?=
MIME-Version: 1.0
X-Mailer: Nette Framework
Date: Fri, 18 Sep 2009 15:30:17 +0200
From: =?UTF-8?Q?Peter=20Sk=C3=BA=C5=A1ka?= <reguli.peter@gmail.com>
Message-ID: <207c2ed1a7ddcdb25d7fcb8c1639e658@www.intermont-reguli.sk>
Content-Type: multipart/alternative;
boundary="--------a0263df5185113d5ebaca871a3c34797"
----------a0263df5185113d5ebaca871a3c34797
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
NovĂĄ zprĂĄva z kontaktnĂho formulĂĄĹ�e!
Meno: Peter Skúťka
E-mail: reguli.peter@gmail.com
Text zprĂĄvy:
Chceli by sme vam napisat to a to.
----------a0263df5185113d5ebaca871a3c34797
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
<h3>NovĂĄ zprĂĄva z kontaktnĂho formulĂĄĹ�e!</h3>
<ul>
<li><strong>Meno:</strong> Peter Skúťka</li>
<li><strong>E-mail:</strong> <a href="mailto:reguli.peter@gmail.com">reguli.peter@gmail.com</a></li>
</ul>
<h4>Text zprĂĄvy:</h4>
<p>Chceli by sme vam napisat to a to.</p>
----------a0263df5185113d5ebaca871a3c34797--
U mě to při testování bylo v pořádku, netuší někdo, v čem by mohl být problém? Revize je (před nočními updaty) nejnovější, musel jsem tam totiž dávat prefixed verzi.
Editoval LastHunter (18. 9. 2009 15:51)
- kravčo
- Člen | 721
Vyzerá to rovnako ako už hlásený bug
v Nette\Mail (ondrique & Honza M.), skontroluj si, či máš na serveri
naozaj najnovšiu verziu Nette a či Nette/Mail/MailMimePart.php
neobsahuje self::EOL . ' '
prípadne v minified verzii
Nette/loader.php self::EOL.' '
, tiež skús zbehnúť
test, ktorý som tam napísal.
- Ondřej Mirtes
- Člen | 1536
Updatnul jsem revizi Nette, problém ale přetrvává :/ Zkoušel jsem pustit i test, na localhostu i na serveru PASS.
Přišel opět takový mail:
=?UTF-8?Q?=20formul=C3=A1ra?=
MIME-Version: 1.0
X-Mailer: Nette Framework
Date: Fri, 18 Sep 2009 16:22:29 +0200
From: =?UTF-8?Q?Ond=C5=99ej=20Mirtes?= <ondrej@mirtes.cz>
Message-ID: <9aaa55048b2cff711f92188a335da802@www.intermont-reguli.sk>
Content-Type: multipart/alternative;
boundary="--------9730d9c054228b968d22f609c564f5da"
----------9730d9c054228b968d22f609c564f5da
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
NovĂĄ zprĂĄva z kontaktnĂho formulĂĄĹ�e!
Meno: Ond�ej Mirtes
E-mail: ondrej@mirtes.cz
Text zprĂĄvy:
TestovacĂ zprĂĄva.
+Ä�ĹĄÄ�Ĺ�ŞýåĂĂŠ
----------9730d9c054228b968d22f609c564f5da
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
<h3>NovĂĄ zprĂĄva z kontaktnĂho formulĂĄĹ�e!</h3>
<ul>
<li><strong>Meno:</strong> Ond�ej Mirtes</li>
<li><strong>E-mail:</strong> <a href="mailto:ondrej@mirtes.cz">ondrej@mirtes.cz</a></li>
</ul>
<h4>Text zprĂĄvy:</h4>
<p>TestovacĂ zprĂĄva.</p>
<p>+Ä�ĹĄÄ�Ĺ�ŞýåĂĂŠ</p>
----------9730d9c054228b968d22f609c564f5da--
Samotné vytváření e-mailu není nic zvláštního:
protected function createComponentContactForm() {
$form = new BaseForm;
$form->addText('name', 'Vaše meno')
->addRule(NForm::FILLED, 'Vyplňte vaše meno');
$form->addText('email', 'Váš e-mail')
->addRule(NForm::FILLED, 'Vyplňte váš e-mail')
->addRule(NForm::EMAIL, 'E-mail má nesprávný tvar');
$form->addTextarea('text', 'Správa')
->addRule(NForm::FILLED, 'Vyplňte správu');
$form->addSubmit('okSubmit', 'Odeslat');
$form->onSubmit[] = array($this, 'contactFormSubmitted');
return $form;
}
public function contactFormSubmitted(BaseForm $form) {
try {
$this->sendMail($form->getValues());
$this->flashMessage('Správa úspěšně odoslána!');
$this->redirect('this');
} catch (IOException $e) {
$form->addError($e->getMessage());
}
}
private function sendMail($values) {
$mail = new NMail;
$settings = NEnvironment::getConfig('mail');
$mail->setSubject('Nová správa z kontaktného formulára');
$mail->setFrom($values['email'], $values['name']);
$mail->addTo($settings->to, $settings->toName);
$template = $this->createTemplate();
$template->setFile(NEnvironment::getVariable('templatesDir') . '/Mail.phtml');
$template->name = $values['name'];
$template->email = $values['email'];
$template->text = $values['text'];
$mail->setHtmlBody($template);
try {
$mail->send();
} catch (InvalidStateException $e) {
throw new IOException('Nepodařilo se odeslat e-mail, zkuste to prosím za chvíli.');
}
}
A šablona:
<h3>Nová zpráva z kontaktního formuláře!</h3>
<ul>
<li><strong>Meno:</strong> {$name}</li>
<li><strong>E-mail:</strong> <a href="mailto:{$email}">{$email}</a></li>
</ul>
<h4>Text zprávy:</h4>
{!$text |texyPublic}
Editoval LastHunter (18. 9. 2009 16:32)
- Honza Marek
- Člen | 1664
kravčo: Neměl jsem stejný bug jako ondrique. Nefungovalo mi to ani s nejnovější vývojovou verzí a ten test jsem omylem zkoušel na localhostu, kde jsem měl ještě starší nette, takže jsem ti pak poslal špatný výsledek.
- Ondřej Mirtes
- Člen | 1536
Honza M. napsal(a):
kravčo: Neměl jsem stejný bug jako ondrique. Nefungovalo mi to ani s nejnovější vývojovou verzí a ten test jsem omylem zkoušel na localhostu, kde jsem měl ještě starší nette, takže jsem ti pak poslal špatný výsledek.
Tak máš asi to samé co já. Vyřešils to nějak?
- David Grudl
- Nette Core | 8218
Tyhle chyby se poměrně těžko takhle nadálku řeší, doporučil bych tento postup:
- vytvořte email v Nette a uložte do souboru
- pokuste se tentýž email vytvořit v programu, kde to nefunguje a jeho zdrojový soubor uložte do souboru
- oba soubory porovnejte (porovnávejte i whitespaces)
Do fóra nejlépe dávejte odkazy na stažení vygenerovaných emailů, důležitá je totiž jejich binární podoba.
ad bod 1) pro uložení lze použít tento kód
Mail::$defaultMailer = 'FileMailer';
class FileMailer implements IMailer
{
function send(Mail $mail)
{
file_put_contents('email.dat', $mail->generateMessage());
}
}
- Ondřej Mirtes
- Člen | 1536
Oboje je z prefixed verze, na websupport.sk běží rozšíření HTTP.
A jak uložit e-mail do této podoby v Outlook Express fakt netuším. Zkoušeli jsme eml, ale prostě to není tento formát.
- Email z Outlook Express (je tam jiný příjemce a odesílatel)
EDIT: Délka předmětu to u mě také řeší :o)
Editoval LastHunter (18. 9. 2009 18:52)
- Ondřej Mirtes
- Člen | 1536
Cifro napsal(a):
LastHunter napsal(a):
na websupport.sk běží rozšíření HTTP.
Off topic: keď požiadaš oni ťa prehodia na iný stroj kde nie je rozšírenie http a ani eAccelerator. Lenže potom namiesto verzie 5.2.9 bude 5.2.6.
Teď už je to jedno, přidávání N do zdrojáků jsem už absolvoval :) Na požadavek vypnutí HTTP mi odpověděli toto:
zial nie je to technicky mozne vypnut iba pre jednu domenu jedine riesenie je asi ze si premenujete tie nazvy u Vas v kode
Žádný přesun jinam mi nenabídli.
- Patrik Votoček
- Člen | 2221
možná to celé souvisí s tím že Nette nezalomí řádek
s předmětem. A tak překročí u RFC 2047 max.
délku řákdu 75znaků.Blbost Nette na to myslí!!!
Editoval vrtak-cz (18. 9. 2009 20:02)
- Patrik Votoček
- Člen | 2221
Beru zpět to co jsem napsal před chvilkou… Trochu po tom pátrám můžeš prosím zkusit jestli bude fungovat tenhle patch? (Je to jenom pokus!!!)
- kravčo
- Člen | 721
Pri bugu v Nette\Mail fungovalo riešenie v jednom prípade (ondrique). Teraz sa tomu dosť divím, najmä po tom, čo som si prečítal na bugs.python.org: #1974 a #1645148 a na viacerích fórach súvisiacich s knižnicami na posielanie mailov.
Vraj má Thunderbird i Outlook problémy so správami, kde sa dlhé hlavičky zalamujú tabulátorom, pričom medzeru v pohode zvládnu. Hovorí sa síce len o ASCII hlavičkách, no problém s tabulátorom by mohol súvisieť aj s tými kódovanými. Aj preto je mi záhadou, ako to, že riešenie u ondriqua zabralo… možno tiež skrátil predmet…
Prosím vás teda (Honza M. i LastHunter), skúste či tieto problémy
spôsobuje i foldovanie medzerou – v súbore
Nette/Mail/MailMimePart.php nahraďte všetky (štyri) výskyty
"\t
→ `" `.
diff --git a/Nette/Mail/MailMimePart.php b/Nette/Mail/MailMimePart.php
index d677e74..0f94006 100644
--- a/Nette/Mail/MailMimePart.php
+++ b/Nette/Mail/MailMimePart.php
@@ -151,7 +151,7 @@ class MailMimePart extends /*Nette\*/Object
$email = " <$email>";
}
if ($len + strlen($email) + 1 > self::LINE_LENGTH) {
- $s .= self::EOL . "\t";
+ $s .= self::EOL . " ";
$len = 1;
}
$s .= "$email,";
@@ -267,7 +267,7 @@ class MailMimePart extends /*Nette\*/Object
foreach ($this->headers as $name => $value) {
$output .= $name . ': ' . $this->getEncodedHeader($name);
if ($this->parts && $name === 'Content-Type') {
- $output .= ';' . self::EOL . "\tboundary=\"$boundary\"";
+ $output .= ';' . self::EOL . " boundary=\"$boundary\"";
}
$output .= self::EOL;
}
@@ -340,7 +340,7 @@ class MailMimePart extends /*Nette\*/Object
if ($l = strspn($s, $range, $pos)) {
while ($len + $l > self::LINE_LENGTH - 2) { // 2 = length of suffix ?=
$lx = self::LINE_LENGTH - $len - 2;
- $o .= substr($s, $pos, $lx) . '?=' . self::EOL . "\t" . $prefix;
+ $o .= substr($s, $pos, $lx) . '?=' . self::EOL . " " . $prefix;
$pos += $lx;
$l -= $lx;
$len = strlen($prefix) + 1;
@@ -353,7 +353,7 @@ class MailMimePart extends /*Nette\*/Object
$len += 3;
// \xC0 tests UTF-8 character boudnary; 9 is reserved space for 4bytes UTF-8 character
if (($s[$pos] & "\xC0") !== "\x80" && $len > self::LINE_LENGTH - 2 - 9) {
- $o .= '?=' . self::EOL . "\t" . $prefix;
+ $o .= '?=' . self::EOL . " " . $prefix;
$len = strlen($prefix) + 1 + 3;
}
$o .= '=' . strtoupper(bin2hex($s[$pos]));
- Bernard Williams
- Člen | 207
Nazdárek,
nevím, jestli se to někde řešilo (na fóru jsem to nenašel), ale napadla mě jedna věc.
Co změnit chování odesílání e-mailů na vývojovém serveru? Nevím jak je to u ostatních, ale v mém případě na všech vývojových serverech (tím myslím jak localhost, tak i přímo servery určené na vývoj) je zasílání e-mailů nežádoucí – nehledě na to, že na localhostu mi to ani nefunguje.
Proto bych navrhl, aby na vývojovém serveru (DEVELOPMENT) metoda $mail->send(); e-mail neodeslala a ale pouze vytvořil jakousi zprávu (log), informující uživatele, že kdyby se aplikace nacházela na ostrém serveru, tak by došlo k odeslání e-mailu.
Tuto zprávu (log) bych si představoval jako nějakou tabulky (popř. více tabulek podle počtu e-mailů), která by obsahovala základní informace (from, to, subject atd.) a tělo zprávy. Tato tabulka by byla absolutně pozicována (0,0) a překrývala by všechen obsah stránky. Také by obsahovala JS odkaz, který by ji po zkontrolování zneviditelnil.
Zatím to řeším zakomentováním metody $mail->send(); (popř. podmínkou isProduction), ale i tak to musím otestovat na ostrém serveru, abych měl jistotu, že obsah e-mailu odpovídá zadání.
Děkuji
Bernard
- Patrik Votoček
- Člen | 2221
Udělej si vlastní SendmailMailer
který to bude ukládat
právě do logu… A v config.ini
si ho zapni pro
development…
- Roman Ožana
- Člen | 52
Třebas se někomu bude hodit můj EmailWithTemplate class
class BaseMailPresenter extends BasePresenter {
}
/**
* Send emails with html template (using latte filter)
*/
class MailWithTamplate extends Mail {
/** @var Template */
public $template = null;
/**
* Create new email with template
* @param mixed $tamplate Template object or file path to template
*/
function __construct($template = null) {
parent::__construct();
if ($template instanceof Template) {
$this->template = $template;
} elseif (is_string($template)) {
$this->setTemplateFile($template);
}
}
/**
* Set template file
* @param string $file
*/
public function setTemplateFile($file) {
$presenter = new BaseMailPresenter(); // or can be instance of BasePresenter unless isn't abstract class
if (is_null($this->template)) {
$this->template = $presenter->getTemplate(); // set template
}
// autodetect template
if (!is_file($file)) {
$files = $presenter->formatTemplateFiles(Environment::getApplication()->getPresenter()->getName(), $file);
foreach ($files as $file) {
$file = str_replace('templates/', 'templates/Mails/', $file); // add Mails after template
if (is_file($file)) {
break;
}
}
}
$this->template->setFile($file); // direct name select
}
public function send() {
// set template as body
if (!is_null($this->template)) {
$this->setHtmlBody($this->template);
}
parent::send();
}
}
// pouziti parametr muze byt cesta / jmeno nebo Template object
$mail = new MailWithTamplate('template');
Editoval Roman Ožana (15. 1. 2010 14:50)
- Ondřej Brejla
- Člen | 746
Zaražte mě pokud se mýlím, ale neumí náhodou Nette\Mail nette šablony již v základu? ;-)
- Roman Ožana
- Člen | 52
To je pravda Mail Template umí, ale pokud vím, tak musíte vždy ručně nastavit cestu k template (viz). Tahle class si soubory automaticky najde, podobně jako Presenter si hledá Template k jednotlivým View.
V podstatě máte tři možnosti, class poslat přímo instanci Template, nebo ji zadat celou cestu k template a nebo stačí prostě poslat název souboru bez phtml a třída si ji najde v adresáři např.
$mail = new MailWithTamplate('mujmail');
class pak hledá tyhle soubory
- {$appdir}/Module<name>/templates/Mail/<PresenterName>/mujmail.phtml
- {$appdir}/templates/Mail/<PresenterName>.mujmail.phtml
- {$appdir}/templates/Mail/<PresenterName>/mujmail.phtml
Pokud to nějaká nová verze umí podobně, tak si ji prostě budu muset stáhnout :)
Editoval Roman Ožana (15. 1. 2010 23:09)