Jak makru předat proměnné?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- jtousek
- Člen | 951
Objevil jsem na planatte článek Jak helperu předat proměnné. Za něj autorovi patří můj dík. :-)
Potřeboval bych však totéž i pro makra a bohužel se mi moc nedaří s tím pohnout. Věděl by někdo jak na to? Problém je v tom, že makro musí být buď statická fce nebo musí používat nějakou proměnnou kterou má šablona k dispozici (např. $_presenter). Teď to dělám přes statickou třídu které v BasePresenteru předám potřebné parametry. Jde to lépe?
- Tomáš Votruba
- Moderator | 1114
Nevím, jestli rozumím tvému problému, protože mi to přijde běžně možné. Já na to jdu takto.
{menuItem Homepage:default, Test lists}
Pokud myslíš přímo proměnnou
{menuItem $address, $name}
tak na tom jsem to nezkoušel, ale nevidím důvod, proč by to nešlo.
- Tomáš Votruba
- Moderator | 1114
Nešlo by v createTemplate()
proměnnou předat
konstruktorem?
public function createTemplate($class = NULL)
{
parent::createTemplate($class);
$wwwDir = "specify";
$myMacros = new MyMacros($wwwDir);
$myMacros::install($latte->compiler);
// ...
}
class MyMacros extends \Nette\Latte\Macros\MacroSet
{
/** @var string */
private $wwwDir;
public function __construct($wwwDir)
{
$this->wwwDir = $wwwDir;
}
public function macroFolder(MacroNode $node, PhpWriter $writer)
{
return $writer->write(" echo 'my code:'" . $this->wwwDir);
}
}
(Kdyby ti náhodou postačilo $basePath, je možné jej použít.)