Návrh na nové Latte makro {showIf}
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- h4kuna
- Backer | 740
Makro řeší následující situaci.
{if $foo}
<a href="#anchor">bar</a>
{else}
bar
{/if}
Nahradit tímto zápisem.
<a n:showIf="$foo" href="#anchor">bar</a>
Důvody:
- šetří místo
- neduplikuje se obsah tagu <a>
Implementace:
<?php
namespace Foo;
use Latte\Compiler;
use Latte\MacroNode;
use Latte\Macros\MacroSet;
use Latte\PhpWriter;
class Macros extends MacroSet {
public static function install(Compiler $compiler) {
$me = new static($compiler);
$me->addMacro('showIf', array($me, 'macroShowIf'), array($me, 'macroEndShowIf'));
}
public function macroShowIf(MacroNode $node, PhpWriter $writer) {
return $writer->write('if (%node.args) {');
}
public function macroEndShowIf(MacroNode $node, PhpWriter $writer) {
$out = NULL;
$tag = $node->htmlNode->name;
if (preg_match('/^<' . $tag . '.*?>(?P<inner>.*)<\/' . $tag . '>$/s', $node->content, $find)) {
$out .= '} else { ?>' . $find['inner'];
}
return $out . '<?php }';
}
}
Editoval h4kuna (21. 10. 2014 10:22)
- jiri.pudil
- Nette Blogger | 1029
Nebo pomocí prefixu
tag-
aplikujeme makro jen na samotné HTML značky:<p><a href="{$url}" n:tag-if="$url">Title</a></p>