我拼命想在symfony-cmf中渲染一个子菜单。
结构:
page1
├─p1-subpage1
├─p1-subpage2
└─p1-subpage3
page2
├─p2-subpage1
└─p2-subpage2
每当当前页面位于page1
层次结构中的某个位置时,它应该使用p1-subpage*
来呈现菜单,当我在page2
层次结构中时,它应该使用p2-subpage*
来渲染菜单。从技术上讲,这意味着它应该将当前项目设置为第一级别的父级(如果它尚未在其上)并渲染一级节点(例如knp_menu_render('main', { depth: 1 })
)。
问题可以分为两部分:
getCurrentItem
方法has been removed with KNP-Menu 2.0。虽然cmf currently uses v1.1 of the knp-menubundle,但这是to change soon cmfMainContent
变量,也无法在我的{{ dump() }}
中找到任何类似的内容(也没有包含任何菜单)。感谢您的帮助。
答案 0 :(得分:1)
在这里查看使用选民决定要突出显示内容的示例: https://github.com/dbu/conference-tutorial-1.0/pull/20
除此之外,我们在MenuBundle的KnpMenu 2.x兼容版本上取得了很好的进展,但它可能要到1月才能稳定发布(但我们可能会提前发布一个......我们会看到): https://github.com/symfony-cmf/MenuBundle/pull/214
答案 1 :(得分:1)
我昨天为自己的,类似的用例创建了一个包。
然而,由于我的所有页面共享相同的路径,您可能需要对其进行相当多的调整。
我仍然认为你可能会找到一些灵感,特别是对你问题的第二部分。
我的捆绑: https://github.com/burki94/RecursiveMenuBundle/blob/master/README.md
AbstractRecursiveBuilder:https://github.com/burki94/RecursiveMenuBundle/blob/master/Menu/AbstractRecursiveBuilder.php:
答案 2 :(得分:0)
这不是一个真正的解决方案,因为它没有遵循我与KnpMenu 2兼容的要求。*。但是这个已弃用的解决方案很简单:
{% set currentItem = knp_menu_get('main').currentItem %}
{% if currentItem is not null %}
{% if currentItem.getLevel() == 1 %}
{% set main = currentItem %}
{% else %}
{% set main = currentItem.getParent() %}
{% endif %}
{{ knp_menu_render(main, { 'template': 'ComBundle:Default:left_menu.html.twig', 'currentClass': 'uk-active' }) }}
{% endif %}