Předání obsahu komponenty do emailu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Marsme
- Člen | 75
Potřebuji z komponenty která generuje email a zobrazuje ho zároveň dostat html které připojím do mailu a odešlu ho.
V komponentě jsem překryl metodu createTemplate kterou volám z další komponenty která mi pak kód odešle.
public function createTemplate($class = NULL)
{
$template = parent::createTemplate($class);
$template->setFile(__DIR__ . DIRECTORY_SEPARATOR . "OrderEmailGenerator.latte");
$template->products = $this->products;
$template->billAdress = $this->billAdress;
$template->clientAdress = $this->clientAdress;
$template->billNumber = $this->parameters["bankNumber"];
$template->bankCode = $this->parameters["bankCode"];
$template->projectName = $this->parameters["emailProjectName"];
$template->projectMail = $this->parameters["emailProjectEmail"];
return $template;
}
A v druhé komponentě na místě kde potřebuji vzít html podobu komponenty a poslat email to volám takto:
$mailGenerator = new OrderEmailGenerator();
$mailGenerator->setOrderInfo($writeProducts, $billAdress, $clientAdress, $payments);
$mailGenerator->parameters = $this->parameters;
$htmlEmail = $mailGenerator->createTemplate();
//Odeslani mailu uzivateli
$email = new Message;
$email->setFrom($this->parameters["emailOrderFrom"])
->addTo("some@mail.com")
->setHtmlBody($htmlEmail)
->send();
Takhle to bohužel ale skončí chybou Component '' is not attached to 'Nette\Application\UI\Presenter
- peter.z
- Člen | 37
V tej druhej komponente si vytvor tu prvu nasledovne:
protected function createComponentOrderEmailGenerator()
{
return new OrderEmailGenerator(); // predpokladam ze tak sa vola tvoja 1. komponenta
}
A teraz uz staci upravit tu funkciu na posielanie emailov nasledovne:
$mailGenerator = $this["orderEmailGenerator"];
$mailGenerator->setOrderInfo($writeProducts, $billAdress, $clientAdress, $payments);
$mailGenerator->parameters = $this->parameters;
$htmlEmail = $mailGenerator->template; // Nemusis volat createTemplate, ten sa zavola sam ked si zavolas sablonu
//Odeslani mailu uzivateli
$email = new Message;
$email->setFrom($this->parameters["emailOrderFrom"])
->addTo("some@mail.com")
->setHtmlBody($htmlEmail)
->send();