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)
请阅读许可协议文件以获取更多信息。