jak vytvořit template pro email

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

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

Ahoj, asi máš Nette 2.0 alfa 2, v téhle verzi je TileTemplate umístěn v namespace Nette\Templates. Tzn. zkus tohle:

$template = new \Nette\Templates\FileTemplate('email.phtml');
ansorge
Člen | 9
+
0
-

Bohužel toto mi taky hlásí:
Class ‚Nette\Templates\FileTemplate‘ not found

Už si s tím nevím rady.

kravčo
Člen | 721
+
0
-

Nová verzia je trochu vágne označenie…

Je to taký problém pozrieť sa do adresára Nette/ ako sa tá trieda v tej novej verzii volá?

nanuqcz
Člen | 822
+
0
-

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

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

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

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

@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)