qeep-pro / twig-tree-tag
一个用于简洁遍历嵌套列表(例如导航菜单)的Twig扩展。
Requires
- twig/twig: ^2.0
README
一个用于简洁遍历嵌套列表(例如导航菜单)的Twig扩展。
要求
需要PHP 5.4或更高版本(由于在编译模板的匿名函数中使用$this,不幸的是这是实现块调用自身的递归的唯一方法)。
想法
{% tree %}标签几乎与{% for %}标签一样工作,但在{% tree %}标签内,您可以调用{% subtree var %}来递归运行带有给定var的{% tree %}块。此标签的主要用例是嵌套导航菜单。
此扩展由Alain Tiemblo编写,(由Jordan Lev进行了一些非常小的修改)。由Igor Kamyshev适配Twig 2。
使用示例
在此示例中,menu是一个包含对象数组的数组,每个对象包含name、url和children属性(children本身也是一个具有相同属性的数组对象等)。
{% tree item in menu %} {% if treeloop.first %}<ul>{% endif %} <li> <a href="{{ item.url }}">{{ item.name }}</a> {% subtree item.children %} </li> {% if treeloop.last %}</ul>{% endif %} {% endtree %}
就像一个{% for %}循环一样,您可以访问列表项的键
{% tree key, item in menu %} <li> <b>Item {{ key }}</b>: {{ item.name }} {% subtree item.children %} </li> {% endtree %}
treeloop变量是什么?
treeloop变量在{% tree %}标签内的作用与在{% for %}标签内的loop变量相同。它被命名为不同,以便您仍然可以在{% tree %}标签内部使用loop(否则它们将发生冲突)。
treeloop包含与loop相同的所有特殊变量。
treeloop.index:循环在当前嵌套级别的当前迭代。(1索引)treeloop.index0:循环在当前嵌套级别的当前迭代。(0索引)treeloop.revindex:循环在当前嵌套级别从末尾的迭代次数(1索引)treeloop.revindex0:循环在当前嵌套级别从末尾的迭代次数(0索引)treeloop.first:如果是当前嵌套级别的第一次迭代。treeloop.last:如果是当前嵌套级别的最后一次迭代。treeloop.length:当前嵌套级别序列中的项目数。treeloop.parent:父嵌套级别的上下文(或者如果目前在树的根级别,则是tree标签本身的父上下文)。
此外,treeloop还包含2个额外的变量,告诉您关于当前嵌套级别的信息
level:当前嵌套级别(1索引 - 因此树的根级别是1,2级是2等)level0:当前嵌套级别(0索引 - 因此树的根级别是0,2级是1等)
如果我想要在另一个树标签内部使用树标签怎么办?
为了处理您想在另一个树标签内部开始新树的情况(即具有自己标记的新树“根”),请在您的{% tree %}标签中使用as将每个树分配给变量名,然后通过with将其传递给subtree。这允许Twig知道当它遇到{% subtree %}标签时应该调用哪个{% tree %}。例如...
{% tree item in menu as treeA %} {% if treeloop.first %}<ul>{% endif %} <li> {{ item.name }} {% subtree item.children with treeA %} <h2>Some other tree (that has its own "root", not a sub-tree of treeA):</h2> {% tree otherthing in item.otherthings as treeB %} {{ otherthings.name }} {% subtree otherthings.subitems with treeB %} {# We use "with treeB" above so Twig knows which parent tree tag to call #} {% endtree %} </li> {% if treeloop.last %}</ul>{% endif %} {% endtree %}
安装
composer require qeep-pro/twig-tree-tag
使用
独立
$loader = require __DIR__.'/vendor/autoload.php'; $twig = new \Twig_Environment( new \Twig_Loader_Filesystem(__DIR__.'/view/') ); $twig->addExtension(new QEEP\TwigTreeTag\Twig\Extension\TreeExtension()); // (...)
Symfony 3
将以下行添加到services.yml
app.twig.tree_extension: class: QEEP\TwigTreeTag\Twig\Extension\TreeExtension tags: - { name: twig.extension }
许可协议
MIT 许可协议 (MIT)
请阅读许可协议文件以获取更多信息。