我想编写自己的菜单样式,但我更喜欢在模板中进行,而不是自己编写菜单。
我基本上希望能够做到这样的事情:
{% if m.menu %}
<ul>
{% for top_level_id in m.menu %}
{% with m.rsc[top_level_id] as top_level %}
<li><a href="{{ top_level.page_url }}">{{ top_level.title }}</a>
{% if top_level.menu %}
<ul>
{% for mid_level_id in top_level.menu %}
{% with m.rsc[mid_level_id] as mid_level %}
<li><a href="{{ midlevel.page_url }}">{{ mid_level.title }}</a></li>
{% endwith %}
{% endfor %}
</ul>
{% endif %}
</li>
{% endwith %}
{% endfor %}
</ul>
{% endif %}
如何从Zotonic模板访问菜单模型?
答案 0 :(得分:1)
(即将推出)0.5版本和Zotonic的提示使用模板来显示菜单。检查mod_menu/templates/_menu.tpl
。
此模板由菜单scomp调用。
答案 1 :(得分:1)
添加到我以前的答案。标准_menu.tpl
会收到包含所有菜单项的列表。此列表是完整菜单的深度优先树步行的结果。每个菜单都是
{MenuRscId, DepthOfMenu, NrInSubMenu, HasSubMenuFlag}
顶级菜单的深度为1,菜单中的第一个菜单项的nr为1。
过滤掉当前用户不允许看到的所有菜单项。
默认模板的代码:
<ul id="{{ id_prefix }}navigation" class="clearfix at-menu do_superfish">
{% for mid,depth,nr,has_sub in menu %}
{% if not mid %}{% if depth > 1 %}</ul></li>{% endif %}
{% else %}
{% if nr == 1 and not forloop.first %}<ul{% if mid|member:path %} class="onpath"{% endif %}>{% endif %}
<li id="{{ id_prefix }}nav-item-{{nr}}"
class="{% if is_first %}first {% endif %}{% if is_last %}last{% endif %}">
<a href="{{ m.rsc[mid].page_url }}"
class="{{ m.rsc[mid].name }}{% if mid == id %} current{% else %}{% if mid|member:path %} onpath{% endif %}{% endif %}">{{ m.rsc[mid].short_title|default:m.rsc[mid].title }}</a>
{% if not has_sub %}</li>{% endif %}
{% endif %}
{% endfor %}
{% if forloop.last %}{% include "_menu_extra.tpl" %}{% endif %}
</ul>