1

我正在拼命地尝试在 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 }))。

问题可以分为两部分:

  1. 从给定节点呈现(子)菜单
  2. 检索当前节点

思考与试验

  • TWIG:有人建议支持渲染子菜单作为 KnpMenu 本身的功能,但尚未完成。作为解决方法,注册树枝扩展已由问题中的某个人提供。但是,此扩展基于随 KNP-Menu 2.0删除getCurrentItem的方法。尽管 cmf当前使用的是 knp-menubundle v1.1,但很快就会改变
  • TWIGCnertaBreadcrumbBundle将带回此功能,但也取决于KNP-Menu 2.0。
  • TWIG使用与此处建议的类似的hack。它检查当前的 URI,计算斜杠的数量并根据它决定使用什么。这可能会奏效。这里的问题:我没有cmfMainContent定义变量,也找不到类似的东西{{ dump() }}(也没有包含菜单)。
  • RouteVoter: cmf 本身有一些 MenuVoters 本身,它们有很好的文档说明它们是什么,但没有说明如何使用它们。我认为没有任何方法可以访问该功能whithin twig也不知道如何拦截菜单构建

谢谢你的帮助。

4

3 回答 3

1

我昨天为我自己的类似用例创建了一个捆绑包。

但是,由于我的所有页面都共享相同的路线,您可能需要对其进行相当多的调整。

我仍然认为您可能会找到一些灵感,尤其是对于您问题的第二部分。

我的包: https ://github.com/burki94/RecursiveMenuBundle/blob/master/README.md

AbstractRecursiveBuilder:https ://github.com/burki94/RecursiveMenuBundle/blob/master/Menu/AbstractRecursiveBuilder.php :

于 2014-11-06T10:08:08.927 回答
1

在这里查看一个使用选民来决定突出显示内容的示例: https ://github.com/dbu/conference-tutorial-1.0/pull/20

除此之外,我们在与 KnpMenu 2.x 兼容的 MenuBundle 版本上取得了良好进展,但可能要到一月份才能发布它的稳定版本(但我们可能会更早发布......我们会看到): https:/ /github.com/symfony-cmf/MenuBundle/pull/214

于 2014-11-05T16:14:47.160 回答
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 %}
于 2014-11-06T15:45:15.900 回答