Registrované vlastní makro neexistuje

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

Zdravím, řeším problém s vlastním makrem. Registrace makra proběhne bez chyby, při použití ale laděnka hlásí „Exception in Nette\Templating\Template::__toString(): Unknown macro {AHOJ} in C:\xampp-1–7–7-standalone4\htdocs\libs\Nette\Latte\Compiler.php:519“.

Použití makra:

$template = new StringTemplate();
$template->presenter = $this->presenter;
$template->registerFilter(new \Nette\Latte\Engine);
$template->setSource($html);
$html = $template->__toString();

Vypadá to, že v \Nette\Latte\Engine moje makro AHOJ není. Jeho registrace proběhla bez problémů, takže mě napadá jen to, že to makro se uložilo do jiného Engine, než se předává $template.

Chápu správně, že je potřeba vytvořit jen jednu instanci Engine a tu pak předávat všude, kde se přidávají nebo používají vlastní makra? Nebo je to jinak? Pokud je v pořádku vytvořit pokaždé novou instanci Engine, v čem potom může být problém?

Majkl578
Moderator | 1364
+
0
-

Vždyť v tom kódu svoje makro nikde neregistruješ.

Chápu správně, že je potřeba vytvořit jen jednu instanci Engine a tu pak předávat všude, kde se přidávají nebo používají vlastní makra?

Vesměs ano. Latte už v DI je, jako továrnička. Používá se např. v Application\UI\Control.

chikeet
Člen | 160
+
0
-

Makro registruju jinde a dotyčný kód se volá před kódem, který to makro potřebuje (ověřeno). Pro úplnost přidávám ještě kód, který registruje makro:

$latte = new Nette\Latte\Engine;
        $set = new Nette\Latte\Macros\MacroSet($latte->compiler);
        $set->addMacro(
            'AHOJ',
            'echo "ahoj" . %node.args'
        );

Předpokládám, že registrace makra je v pořádku, vzhledem k tomu, že nevyhazuje žádnou chybu.

Takže pokud to chápu správně, problém bude ve vytváření nového Engine.