DedeCMS二级导航菜单如何实现

★DedeCMS二级导航菜单如何实现★简介: 本节内容:DedeCMS二级导航菜单的实现方法。 DedeCMS 的 channel 标签不支持嵌套,不能在模板上直接通过标签来实现多级导航菜单。 有的同学通过修改 channel 标签来实现。

 本节内容:

DedeCMS二级导航菜单的实现方法。
 
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' currentstyle="<li id='item~id~' class='current'><a href='~typelink~' ~rel~>~typename~</a></li>"}  
           <li id="item[field:id/]"><a href='[field:typeurl/]' [field:rel/]>[field:typename/]</a></li>  
           {/dede:channel}  
     </ul>  
<!-- 构造二级菜单 -->  
<script type="text/javascript">  
var cmspath = '{dede:global.cfg_cmspath/}';  
var s = [], menu = [];  
// SQL读出全部二级菜单项  
{dede:sql sql="SELECT b.* FROM `dede_arctype` AS a INNER JOIN `dede_arctype` AS b ON b.reid = a.id AND a.reid = 0   
               WHERE b.ishidden<>1 order by b.reid, b.sortrank asc " db='default'}  
s[[field:id/]] = [[field:id/], [field:reid/], '[field:typename/]', '[field:typedir/]'];  
{/dede:sql}  
// 根据父级菜单分类  
for (var i in s){  
     var p = s[i];  
     if (!menu[p[1]]){  
          menu[p[1]] = [];  
     }  
     menu[p[1]].push({ id: p[0], name: p[2], url: p[3].replace(/\{cmspath\}/, cmspath)});  
}  
// 构造二级菜单的HTML,注入到一级菜单项  
for (var j in menu){  
     var str = '<ul>';  
     for (var k in menu[j]){  
          var submenu = menu[j][k];  
          str += '<li><a href="'+ submenu.url + '">' + submenu.name + '</a></li>';  
     }  
     str += '</ul>';  
     $('#item'+j).append(str);  
}  
</script> 
 
首先,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 style="left: auto; z-index: 1007; display: none;">  
      <li><a href="/press/a/shiyanshigaikuang/shiyanshijieshao">实验室介绍</a></li>  
      <li><a href="http://www.genban.org/css/">实验室主任</a></li>  
      <li><a href="/press/a/yanjiufangxiang">研究方向</a></li>  
      <li><a href="/press/a/zuzhijiagou">组织架构</a></li>  
    </ul>  
  </li>  
  <li id="item2" class="sf-parent"><a href="http://www.genban.org/">科研项目<span class="sf-arrow"></span></a>  
    <ul style="left: auto; z-index: 1002; display: none;">  
      <li><a href="/press/a/hengxiangxiangmu">横向项目</a></li>  
      <li><a href="http://www.genban.org/seo/">纵向项目</a></li>  
    </ul>  
  </li>  
</ul>
至此,我们就完成dedecms中二级导航菜单的制作,希望对大家有所帮助。
 
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

dedecms织梦无需登录注册可下单购买的修改,首先找到/plus/carbuaction.php文件,找到如下代码: //确认用户登录信息if($cfg_ml-IsLogin()){ $userid = $cfg_ml-M_ID;}else{ $username = trim($username); $password = trim($password); if(empty($username)
用过织梦dedecms的人都知道,织梦会员系统相当强大,跟论坛程序差不多,对于使用会员系统的人来说,织梦系统足够用的了,但是,有时候,织梦系统很多的地方又不是我们所希望,或都说,有的地方不适合我们使用,这时候就要对织梦会员系统进行二次开发,所以,
我们在用到织梦dedecms的会员功能时候,注册页面的注册项需要增加,比如想多加一个手机号的字段,需要怎么操作呢?下面我们以增加一个手机号的字段为例子 1、找到网站目录下的/member/templets/reg-new.htm,在合适位置增加一行表单,代码如下: lispan手机
SQL语句中,有统计的函数,我们可以通过在织梦中使用SQL语句统计的方法,在列表页内显示该栏目共有多少篇文章。这样做的好处是,有助于提升用 户体验。比如说我一个文章列表下面有10篇文章,就自动统计出10篇,到20篇的时候自动统计成20篇。这样用户对网站的
我们在做 织梦模板 开发时,有时需要在artlist 和list标签中调用出图集中的图片,同时可以自定调用几张图片。跟版网整理了个一个这样功能的自定义函数。调用后效果如下: dedecms织梦artlist和list标签调用图集图片实现方法 函数代码 请将代码加入到 /includ
大家都知道,Discuz程序在发文章时有个【隐藏】功能,可以限制这个隐藏内容供某些级别的会员查看。 在织梦模板中,做些改动,也是可以实现的。例如:电话号码,下载地址等等。 前提是织梦开启会员功能,已经有了自定义字段。 一、建立文件 ajax_loginsta_c.p