Vytvorit vlastna makro v Model
- bokos
- Člen | 9
Ahojte,
neviem vygooglit, ci je mozne vytvorit vlastne makro v Model. Ak ano neviem
ako, skusal som postupovat podla dokumentacie, ale stale mi to hadze „unknown
xyz macro“
(Unknown macro {try} in …/Shops/default.latte:52)
Vytvoril som si funkciu beforeRender() a tam vlozil
$latte = new Latte\Engine;
// vytvoříme si sadu
$set = new Latte\Macros\MacroSet($latte->compiler);
// do sady přidáme párové makro {try} ... {/try}
$set->addMacro(
'try', // název makra
'try {', // PHP kód nahrazující otevírací značku
'} catch (\Exception $e) {}' // kód nahrazující uzavírací značku
);
Skusal som to rozne, ale neviem ci ma zmysel to tu rozpisovat. Pointa je v tom, ze nikde neviem najst ako to makro dat dokopy. Vdaka za kazdu pomoc. Urcite to tu je riesene, ale nejak to nemozem vyhladat.
- Felix
- Nette Core | 1247
Makra musis tvorit jeste pred kompilaci sablon.
Kdyz pominu, ze tvorit makro v Modelu(!!!) [neplest s modelem aplikace] neni spravna cesta, tak ti to stejne nebude fungovat. Jedine co by ti fungovalo v Modelu (!!!) je registrace helperu.
Potom by sis ve svem presenteru v render*
nebo
beforeRender
a zaregistroval helpery pro konkretni view.
public function beforeRender() {
parent::beforeRender();
SomeMyClass::registerHelpers($template);
// or..
(new SomeMyClass())->registerHelpers($template);
}
Ale jak rikam, neni to spravny postup.
Makra by jsi mel registrovat v configu, viz LatteExtension a helpery idealne ve sve podedene TemplateFactory nebo createTemplate
Editoval Felix (3. 3. 2015 17:21)
- bokos
- Člen | 9
Vdaka, tak dal som na vas a skusil som spravit nejake simple macro a do configu som ho skusil pridat, ale stale to hadze fail.
App/Latte/DatabaseTranslateMacros.php
<?php
namespace App\Latte\DatabaseTranslateMacros
use Latte,
Latte\MacroNode,
Latte\PhpWriter;
class DatabaseTranslateMacros extends MacroSet
{
public static function install(Compiler $compiler)
{
$me = new static($compiler);
/** @var DatabaseTranslateMacros $me */
$me->addMacro('dbTranslate', array($me, 'macroTranslate'));
return $me;
}
public function macroTranslate(MacroNode $node, PhpWriter $writer)
{
return $writer->write('echo %node.word');
}
}
Config:
nette:
latte:
macros:
- App\Latte\DatabaseTranslateMacros::install
Chyba: Nema byt dbTranslate not found, ale DatabaseTranslateMacros.
Github Asset image …
Editoval bokos (3. 3. 2015 18:00)