Registrace MacraSetu do Latte Enginu

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

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

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

Doufám, že to při té chybě aspoň pořádně zajiskřilo a vyhodilo pojistky :).

Martin Vaněk
Člen | 10
+
0
-

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.

David Matějka
Moderator | 6445
+
+1
-

createTemplate bez parametru funguje az od 2.3

Martin Vaněk
Člen | 10
+
0
-

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

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

{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.