我正在创建一个网站,并使用存储在数据库中的树结构成功地让我的导航菜单正常工作。
Menu
作为属性的对象active
,但我不知道如何将其设置为活动!如果我能做到这一点,那么我可以获取当前活动Menu
的路径并使用 WhiteOctober 的 BreadcrumbsBundle 或类似的东西渲染面包屑。
我已经阅读了大量关于 SO 的问题,并且还查看了可用的不同捆绑包,但我仍然坚持如何做到这一点。
我将如何找出要设置为活动的菜单项?
编辑:
- 菜单类:https ://gist.github.com/robcaw/c76426957ea6f262d217#file-gistfile1-php
- 菜单控制器:https ://gist.github.com/robcaw/af18e7c0e61f109e9bda#file-gistfile1-php
编辑2:
好的,我几乎做到了。我已经设法比较了当前路径,使用$this->container->get('request')->getPathInfo();
to aMenu
的 set url
。
为此,我需要将菜单树结构展平为一个数组。当我使用 DoctrineExtensions 的 Tree 扩展时,我使用它的存储库getChildren($node)
来执行此操作。所以现在遍历数组很容易,可以比较 url 和 path。
在面包屑控制器中,我可以$current_item
从菜单控制器传递 ,然后再次使用 Tree 存储库及其getPath()
递归获取给定节点的父节点的方法。
但是,仍然存在一个问题,因为网站上的某些页面没有菜单条目。因此,例如,如果我访问site.com/news/tags/stuff
,则没有菜单条目,因此会破坏该站点。
至今:
- 菜单控制器: https ://gist.github.com/robcaw/61383e26d0a7637bb3f1#file-gistfile1-php
- 面包屑控制器:https ://gist.github.com/robcaw/62341672db576fcb2864#file-gistfile1-txt