Registrace MacraSetu do Latte Enginu
- Martin Vaněk
- Člen | 10
Zdravím všechny,
pro odesílání e-mailů jsem si napsal vlastní rozšíření. Kompilaci Latte jsem vyřešil následovně –
public function send()
{
$latteEngine = new Latte\Engine();
$this->message->setHtmlBody($latteEngine->renderToString($this->templateFile, $this->templateParameter));
$this->mailerSMTP->send($this->message);
}
Nyní ale potřebuji zaregistrovat Macra z WebChemistry/images, Macra jsou definována zde. Mohl by mi někdo poradit jak toho docílit, u Latte/Engine jsem nalezl pouze funkci addMacro(), která povoluje zaregistrovat jednodné Macro.
Pokud jsem to zkusil takhle –
WebChemistry\Images\Macros\Macros::install($latteEngine->getCompiler());
Tak to skončilo chybou… Díky všem za nápovědu.
- David Matějka
- Moderator | 6445
Tak to skončilo chybou…
takhle ne – vzdy rikej, jakou chybu.. at nemusim zas oprasovat kristalovou kouli
ale doporucuji si nechat latte vyrobit tovarnou ILatteFactory, pripadne rovnou ITemplateFactory, viz https://phpfashion.com/…-a-nette-2-3
- Vojtěch Dobeš
- Gold Partner | 1316
Doufám, že to při té chybě aspoň pořádně zajiskřilo a vyhodilo pojistky :).
- Martin Vaněk
- Člen | 10
Omlouvám se za nedoplnění chyby :-) Pojistky to naštěstí nevyhodilo.
Jinak vytvořil jsem tedy Latte skrze ITemplateFactory. Nicméně to hlásí chybu na tomto řádku –
$template = $this->templateFactory->createTemplate();
Konkrétně –
Argument 1 passed to Nette\Bridges\ApplicationLatte\TemplateFactory::createTemplate() must be an instance of Nette\Application\UI\Control, none given, called in Emailer.php on line 58 and defined
Celá funkce je takto –
public function send()
{
$template = $this->templateFactory->createTemplate();
//$this->message->setHtmlBody($latte->renderToString($this->templateFile, $this->templateParameter));
//$this->mailerSMTP->send($this->message);
}
Je to uděláno přesně dle tohoto článku.
- Martin Vaněk
- Člen | 10
Tak bohužel stále se mi nedaří kompilovat Makra, teď už ani klasická Nette makra jako {include}.
Kód mám takto –
public function send()
{
$template = $this->templateFactory->createTemplate();
foreach ($this->templateParameters as $key => $value) {
$template->{$key} = $value;
}
$template->setFile($this->templateFile);
$this->message->setHtmlBody($template);
$this->mailerSMTP->send($this->message);
}
Celý kód je zde. Chyba žádná nevyskočí, jen se makra stanou součástí samotného textu, prostě je to nekompiluje.
- David Matějka
- Moderator | 6445
To je divny, chybu tam nevidim. Je templateFactory instance
Nette\Bridges\ApplicationLatte\TemplateFactory
a vytvorena sablona
instance Nette\Bridges\ApplicationLatte\Template
? nemas v sablone
nejaky {syntax off}
?
- Martin Vaněk
- Člen | 10
{syntax off} tam určitě není. Šablonu vytvářím tak, že jí předám z TemplateFactory rovnou do Message přes setHtmlBody –
$this->message->setHtmlBody($template);
Také to moc nechápu. Vytáhne se jen čísté HTML z šablony, nedochází vůbec ke zpracování maker.