DedeCMS 的 channel 标签不支持嵌套,不能在模板上直接通过标签来实现多级导航菜单。也有网友通过修改 channel 标签来实现。但感觉这种方法不够通用。但感觉不够通用。我的方法不需要修改标签库,主要思路是用JS构造下级菜单,把下级菜单的HTML注入到上级DOM。上代码
<!-- 一级菜单 --> <ul class="sf-menu" id="nav"> <li> <a href='{dede:global.cfg_cmsurl/}/'>首 页</a> </li> {dede:channel type='top' current> 首先是 channel 标签读出一级菜单,使用 “item+ID” 作为菜单项目的id,以后注入二级菜单的HTML时会用到。 第二步是使用SQL取出二级菜单项目。在模板上使用SQL不是个好主意,但也是不得已而为之。如果各位网友有更好的方式,请不要吝啬在本文下面告诉我。 然后是JS登场了。从代码当中穿插的注释也能看明白,就不多解释了。 最终生成的HTML类似这样<ul id="nav" class="sf-menu"> <li> <a href="/press/">首 页</a> </li> <li id="item1" class="sf-parent"><a href="/press/a/shiyanshigaikuang/shiyanshijieshao">实验室概况<span class="sf-arrow"></span></a> <ul >黄色蓝色或者砖红色,犹如童话世界。