rudak / menu-bundle
Symfony 简单菜单包
Requires
- php: >=5.3.2
- doctrine/doctrine-bundle: *
- symfony/framework-bundle: >=2.1
- twig/twig: *
This package is auto-updated.
Last update: 2024-09-11 14:03:00 UTC
README
简单的菜单管理包
安装
composer.json :"rudak/menu-bundle": "dev-master"
Kernel : new Rudak\MenuBundle\RudakMenuBundle()
使用
首先需要配置菜单项,在 config.yml 中可以这样配置:rudak_menu: items: - { index: Accueil, route: homepage, title: '网站首页' } - { index: Administration, route: game_main_admin, title: '网站管理' } hierachy: blog: ['mon_article','liste_articles_full'] # 可选 configuration: current_classname: yes # 可选 other_classname: no # 可选
然后需要将控制器调用 {{ render(controller('RudakMenuBundle:Include:getHtmlMenu')) }} 放置在需要显示菜单的视图中,在我这里是位于 '::main-menu.html.twig' 的一个 bootstrap 标准菜单。但是菜单只返回 LI 元素,因为我的 UL 中有很多类,这样可以更快。可以在 Twig 中添加参数 wrapper = true 来强制发送包含 ID main_menu 的 UL,将所有内容包裹起来。默认情况下,wrapper 为 False。
下面是 Twig 的示例:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button aria-controls="navbar" aria-expanded="false" data-target="#navbar" data-toggle="collapse"
class="navbar-toggle collapsed" type="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="#" class="navbar-brand">
MonSite.fr
</a>
</div>
<div class="navbar-collapse collapse" id="navbar">
<ul class="nav navbar-nav">
{{ render(controller('RudakMenuBundle:Include:getHtmlMenu',{'wrapper':false})) }}
</ul>
</div>
<!--/.nav-collapse -->
</div>
<!--/.container-fluid -->
</nav>
功能
好了,菜单将在每次页面显示时自动调用,现在需要标明当前页面以便相应的选项卡获取 'active' 类。这现在由一个监听器在每次请求时自动完成。所以,一旦请求启动,监听器就会捕获路由名并将其存储在会话中(使用在 MenuHandler 中定义的键)。然后,只需要简单地比较要显示的菜单项和会话中的项,以确定是否分配 'active' 类。关于层次结构,代码有注释,所以不是很难理解。总之,它自己就可以工作了 ^_^
层次结构
在我的一些网站上,博客及其文章给我带来了问题。我想让我的文章依赖于博客选项卡(活动选项卡)。因此,我创建了一个可配置的层次结构系统,如下所示配置在 config.yml 中:
rudak_menu:
items:
// ......
hierachy:
monBlog: ['mon_article','liste_articles_full']
papa: ['fils','fille','chien','chat']
这相当简单易懂,更符合我的需求。例如,如果有一个新闻选项卡,那么它将为新闻列表和新闻本身都保持活动状态。这还可以进一步调整...