分享CMS和会员中心共用导航的方法
发布于 2019-07-11 18:18:57 关联应用 CMS内容管理系统(含小程序)
当我们安装CMS内容管理系统插件以后,默认的会员中心顶部导航和CMS的顶部导航不一致,这是因为CMS和会员中心用的layout(布局)模板不是同一个。
CMS布局模板为:
addons/cms/view/default/common/layout.html
会员中心布局模板为:
application/index/view/layout/default.html
为了让双边的顶部导航一致,我们需要把CMS布局模板中的代码拷贝到会员中心的布局模板中去。
第一步复制顶部导航代码
首先打开addons/cms/view/default/common/layout.html
,找到
<div class="collapse navbar-collapse" id="navbar-collapse"> //顶部导航代码省略 </div>
我们把顶部导航代码
复制到application/index/view/layout/default.html
中的
<div class="collapse navbar-collapse" id="header-navbar"> //顶部导航代码覆盖原有的代码 </div>
第二步引入CMS自定义标签
经过第一步操作后,会员中心导航栏还不能正常操作,因为我们在顶部导航代码中使用channellist
自定义标签,我们需要引入CMS自定义标签后才可以。
首先打开application/common/controller/Frontend.php
,在_initialize
方法内最后面追加以下两行代码
// 加载自定义标签库 $this->view->engine->config('taglib_pre_load', 'addons\cms\taglib\Cms'); $this->view->assign('__CHANNEL__', null);
保存,再后台管理右上角清除缓存。
第三步修改JS代码移除点击事件
此时我们可以到会员中心看到导航已经和CMS同步了,但是一级导航点击却无法跳转,这是由于Boostrap
的下拉列表默认点击是弹出下拉列表,而CMS中有做特殊处理,所以会员中心这里也需要做特殊处理。
我们需要打开public/assets/js/frontend/user.js
,在var Controller = {
之前添加以下代码
//如果是PC则移除navbar的dropdown点击事件 if (!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobi/i.test(navigator.userAgent)) {
$("#navbar-collapse [data-toggle='dropdown']").removeAttr("data-toggle");
} else {
$(".navbar-nav ul li:not(.dropdown-submenu):not(.dropdown) a").removeAttr("data-toggle");
}
添加后的效果如图:
至此修改已经完成,此时清空浏览器缓存,JS即可生效,我们的CMS导航和会员中心导航也就一致了。