Jak psat n:macro?

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

Zdravim, potreboval bych vytvorit n:macro, ale zatim ani podle tutoru netusim jak na to, potreboval bych:

<a n:hrefAllowed="Car:view, $car->id">{$car->label}</a>

aby vypsalo tohle:
<a href="/car/view/1">Ferrari</a>

nebo pokud na to uzivatel nema pravo:
Ferrari

takze samotnej kod v makru by mel bejt:

if (Nette\Environment::getUser()->isAllowed('Car', 'view')) {
	echo "<a href=".link(...
else
	echo "...

netusi nekdo jak na to? Predem dik

Jan Endel
Člen | 1016
+
0
-

Především bych chtěl odkázat na skvělou dokumentaci ohledně maker.

Sám jsem si podle tohohle manuálu dělal makro pro výpis formulářových errorů i mimo makro form, pro inspiraci přikládám:

Macros.php:

use Nette\Forms\Form;
use Nette\Latte\Parser;
use Nette\Latte\Macros\MacroSet;

class Macros extends \Nette\Object
{
	 public function install(Parser $parser, $classFlash = 'alertbox_bad')
	{
		$set = new MacroSet($parser);
		$set->addMacro('formError',
			'$form = $control[%node.word];foreach($form->getErrors() as $error){ echo "<div class=\''. $classFlash .'\'><p>$error</p></div>";}');
	}
}

úryvek BasePresenter.php:

public function templatePrepareFilters($template)
{
        $latte = new Nette\Latte\Engine;

        $myMacros = new Macros();
	$myMacros->install($latte->parser);

        $template->registerFilter($latte);
}

Editoval pilec (17. 10. 2011 14:59)

Wizzard256
Člen | 18
+
0
-

jj, dokumentaci mam projetou, templatePrepareFilters v BasePresenteru taky mam, nicmene nevim jakym zpusobem se resi makra, pokud jsou primo v tagu a ne zvlast

Jan Endel
Člen | 1016
+
0
-

ono je to vzájemně propojené, normální udělané makro má automaticky vlastní n: variantu.

Wizzard256
Člen | 18
+
0
-

aha, tak to asi vazlo celou dobu na tom, ze se to makro nijak nezaregistrovalo, vytvoril sem ten soubor Macros.php a do BasePresenteru dal ten templatePrepareFilters, a porad to pise Nette\Latte\ParseException: Unknown macro {...