使用木材使用小枝实现深度嵌套的菜单循环

时间:2017-03-23 作者:Brian Larson

使用TimberMenu(),我有一个移动菜单,需要深入了解。一定有更好的方法用细枝写这篇文章。使用macros 和/或回路。父级或循环。指数

基本上这个循环只有一个嵌套的循环,但我需要一直到一个曾孙。

<ul class="menu primary dropdown float-right" aria-hidden="true" data-dropdown-menu data-hover-delay="0" data-closing-time="0">
    {% for item in primary_menu.get_items %}
        <li class="{{ item.class }}">
            <a href="{{ item.link }}">{{ item.title }}</a>
            {% if item.get_children %}
                <ul class="menu">
                    {% for child in item.get_children %}
                        <li class="{{ child.class }}"><a href="{{ child.link }}">{{ child.title }}</a></li>
                    {% endfor %}
                </ul>
            {% endif %}
        </li>
    {% endfor %}
</ul>

1 个回复
SO网友:Gustavo Lanzas

从可用性的角度来看,您是否考虑过使用某种子菜单(可能是侧边栏中的小部件),因为导航这么多嵌套菜单可能有点困难。

无论如何,回到你的问题上来。是的,您应该使用宏。这里有一个我以前使用过的例子,用来生成一个3级的深度引导菜单(但它可以处理更多)。

page.php

$context[\'menu\'][\'header_nav\'] = new TimberMenu(\'Header Nav\');
Timber::render(\'page.twig\', $context);

macros/menus.twig

{% macro embedded_list(items) %}
    {% import _self as menus %}
    {% for item in items %}
        <li>
            <a href="{{ item.link }}">{{ item.title }}</a>
            {% if item.has_child_class %}
                <ul>
                    {{ menus.embedded_list(item.get_children) }}
                </ul>
            {% endif %}
        </li>
    {% endfor %}
{% endmacro %}

page.twig

<ul>
  {% import \'macros/menus.twig\' as menus %}
  {{ menus.embeddded_list(navs.header_nav.items) }}
</ul>
我从this 讨论这里有一个blog post 关于它也一样。

相关推荐

Question on templates

我正在使用一个名为Ocean WP的免费主题,它有一个名为“templates”的文件夹我想我可以只保存其中一个模板并重命名它,然后构建一个模板(我需要自定义帖子类型/高级自定义字段)。然而,当我尝试上述操作时,它抛出了一个错误。我的问题是-关于构建模板,我应该寻找什么。当然,构建模板最简单的方法就是复制页面。php并给它起一个新名称,但考虑到有一个名为“templates”的文件夹,这似乎是错误的方法谢谢你的指点