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.