Šablona e-mailu nebere a href
- Jack.q
- Člen | 54
Zdravím Vás,
mám takový menší problém, po úspěšném dořešení předchozího tématu
nelze
načíst presenter mám zde další problém, a to konkrétně ten, že
v šabloně mailu, nefunguje aktivační odkaz, přitom podle příspěvku zde
na fóru to tak skutečně má být. Odkaz v latte šabloně mailu je
takovýto:
Šablona: Kde je umístěn odkaz
<a href="{link //Homepage:verify, $token}">Potvrďte Váš účet</a>
AccountPresenter: Funkce pro to aby fungovalo makro
protected function createTemplate() {
$template = $this->templateFactory->createTemplate();
$template->getLatte()->addProvider('uiControl', $this->linkGenerator);
return $this->getTemplateFactory()->createTemplate($this);
}
- Ondřej Kubíček
- Člen | 494
podle mě to máš celé zbytečné složitě
nejjednoduší by bylo, kdybys měl službu, která by posílala emaily,
zjednoduše mám to nějak takto:
class EmailService
{
public function __construct(Nette\Bridges\ApplicationLatte\ILatteFactory $latteFactory, Nette\Application\LinkGenerator $linkGenerator)
{
$this->latteFactory = $latteFactory;
$this->linkGenerator = $linkGenerator;
}
private function prepareEmail()
{
$mail = new Nette\Mail\Message;
$latte = $this->latteFactory->create();
Nette\Bridges\ApplicationLatte\UIMacros::install($latte->getCompiler());
$latte->addProvider('uiControl', $this->linkGenerator);
$template = $latte->renderToString(__DIR__ . "/templates/email.latte");
$mail->setHtmlBody($template);
return $mail;
}
}
v té prepareEmail si jen přidám ten uiControl
pak můžu
jednoduše používat {link}
makro, nemusíš na začátek ani
dávat //, linkGenerator generuje ty url absolutní už přímo
a máš to oddělené od presenteru, nepřepisuješ si žádné createTemplate a funguje to hlavně
- Jack.q
- Člen | 54
@JanEndel
Vygeneroválo to odkaz <a href=„#“>Potvrďte Váš
účet</a>
@OndřejKubíček
Zatím moc netuším jak se přes služby odesílat mail, proto mám
v presenteru tento zápis:
public function actionOdesliAktivacniEmail($email) {
$latte = $this->account->create($email);
Nette\Bridges\ApplicationLatte\UIMacros::install($latte->getCompiler());
$latte->addProvider('uiControl', $this->linkGenerator);
$template = $latte->renderToString(__DIR__ . "/templates/email.latte");
$mail = new Message();
$mail ->addTo($email)
->setFrom('info@tld.com')
->setSubject('Potvrďte svůj účet')
->setHtmlBody($template);
$mailer = new SendmailMailer;
$mailer->send($mail);
$this->flashMessage('Aktivační email byl odeslán', 'info');
$this->redirect('send');
}
Bohužel píše mi to:
Call to a member function getCompiler() on integer
Editoval Jack.q (28. 2. 2018 10:03)
- nightfish
- Člen | 517
Jack.q napsal(a):
$latte = $this->account->create($email); Nette\Bridges\ApplicationLatte\UIMacros::install($latte->getCompiler());
Bohužel píše mi to:
Call to a member function getCompiler() on integer
Funkce create()
ti vrací integer místo instance
Latte\Engine()
. Proč to tak je zjistíš ve funkci
create()
.
Mimochodem četl jsi článek https://phpfashion.com/…lech-a-nette? Tam je pěkně popsané posílání e-mailů pomocí k tomu vytvořené služby.