Jak vypisovat begin, end, i attr při volání n: makra
- Gogliostron
- Člen | 2
Zdravím,
používám latte šablobny samostatně a naimplementoval jsem si vlastní verzi
n:href makra. To mi funguje v pořádku, ale chtěl jsem dodělat
funkcionalitu, kdy když link vrátí false (což znamená, že ke stránce
člověk nemá přístup), tak se skryje celý odkaz. Aby odpadla potřeba
dělat toto:
{if $user->hasAccess}
<a n:href="..">odkaz</a>
{endif}
Založil jsem tedy vlastní makro nějak takto:
$set->addMacro(
'href',
function($node, $writer) use ($that) {
return $writer->write('if ($link='.$that->macroLink($node, $writer).'):');
},
'endif',
function($node,$writer) {
return ' ?> href="<?=$link;?>" <?php ';
}
);
Problém je ten, že když vyplním poslední parametr $attr metody addMacro,
tak se při zavolání n makra přestane vypisovat begin a end.
Kompilované PHP s parametrem attr:
<a href="<?=$link?>" >Odkaz</a>
Kompilované PHP bez parametru attr:
<?php if ($link=\TestController::getLink(array('action' => 'edit', 'id' => '55', ))): ?>
<a>Odkaz</a><?php endif ;
Jde Latte donutit, aby u určitého makra vypisovala oboje?
- Gogliostron
- Člen | 2
Tak zaprvé. Samozřejmě, že přístup na stránku je standartně
kontrolován a zde jde pouze o skrývání odkazů, které jsou ve společných
šablonách.
Zadruhé, jak jsem psal, tak Latte používám mimo Nette a tím pádem si
musím n:href naimplementovat sám tak jako tak.
Takže děkuji, tato odpověď byla velice nápomocná.
Editoval Gogliostron (29. 5. 2016 22:28)