菜单显示及缓存优化-使用TEEBB快速搭建您的网站

您需要登录后才可观看此视频

为了更好的为您提供服务,请您登录后再查看本课程。

立即登录 注册账号

现在我们把顶部的菜单渲染一下,先来处理主导航菜单。

TEEBB使用了`KnpMenuBundle`,使用`KnpMenuBundle`提供的`knp_menu_render`函数渲染菜单,第一个参数我们传入菜单的别名

{{ knp_menu_render('main_nav') }}

刷新,主菜单已经显示了出来,但是样式有些丑,我们需要创建一个菜单的模板,在knp_menu_render 函数中传入template参数,

{{knp_menu_render('main_nav', {template: 'menu/main_nav.html.twig'})}}

在templates目录中添加menu目录,添加main_nav.html.twig文件,

menu模板需要 继承knp_menu.html.twig文件,这是knpmenubundle提供的twig模板,

{% extends 'knp_menu.html.twig' %}

我们找到knp_menu.html.twig文件,

当前版本TEEBB的菜单功能并没有完整实现knpmenu的完整功能,后续版本我会完善。这里

`list block`是菜单列表的样式,我们需要修改,

`item block`是菜单项的样式,我们也需要修改,

复制`list block`,主菜单需要给ul标签添加 "navbar-nav" 样式类

定义`item block`,复制主菜单的菜单项,先把父级菜单显示出来,

再处理子级菜单,

使用item.hasChildren判断当前菜单是否有子菜单。

如果有子菜单,我们使用item.children 来获取子菜单,并循环输出就可以了。

完成主菜单,刷新页面,主菜单已经成功显示了。

现在处理二级菜单,同样的操作,二级菜单就很容易了,这里我直接复制已经修改好的模板文件。

刷新页面,我们看到底部 Doctrine 图标有很多条查询,顶部的两个菜单一般不需要修改,我们可以将菜单加入缓存中。

在`teebb_core`变量类里,有`hasCache`方法和`getCache`方法,

getCache传入一个key做为缓存的key, $data是需要缓存的数据,

我们使用菜单的别名做为`cacheKey`,

在twig中做下判断如果有当前有缓存则直接从缓存中获取菜单,

如果没有菜单再获取菜单并将菜单存入缓存。

{% if teebb_core.hasCache('main_nav') %}
    {% set main_nav = teebb_core.cache('main_nav') %}
{% else %}
    {% set mainNavHtml = knp_menu_render('main_nav', {template: 'menu/main_nav.html.twig'}) %}
    {% set main_nav = teebb_core.cache('main_nav', mainNavHtml) %}
{% endif %}

同样的方法 来处理二级导航菜单。

刷新页面,数据库的查询还是很多,这是第一次查询需要将数据写入缓存。

使用`teebb_core`的`getCache`方法你可以将任意的数据存入缓存。

TEEBB系统的默认缓存时间是24小时,你可以在`teebb_core.yaml`配置文件里进行修改。

菜单系统有针对缓存的事件处理,如果你更新了菜单,缓存会自动失效。

现在,我们打开顶部的公告内容,页面打开了,但是很丑。

下一节,我们将内容的详情页面完成,你将会学到bundle中Twig模板的覆盖。

课程讨论

当前内容评论功能已关闭。