织梦dedecms应用中,导航栏需要同时调用一级和二级菜单,
常用的方法是用channelartlist标签获到一级栏目,并嵌套channel标签获取二级栏目,
惯性思维告诉我们,代码是这样写:
{dede:channelartlist type='top' row='10' currentstyle=" <li><a href='~typelink~' ~rel~ class='mycur'><span>~typename~</span></a></li>"} <li><a href='[field:typeurl/]'>[field:typename/]</a></li> <dl> {dede:channel type='son' row='10'} <dd><a href="[field:typelink/]">[field:typename/]</a></dd> {/dede:channel} </dl> {/dede:channelartlist}
嗯,一级二级导航菜单的确调出来了,但是~~ 但是!
但是后来会发现,导航栏的当前状态失效了!
完美解决方案来了:dede同时调用一级和二级菜单,让channelartlist标签支持currentstyle的当前状态属性!
打开include\taglib\channelartlist.lib.php
找到:(可复制搜索)
$pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]);
在此行代码下方增加以下代码:
if($typeids[$i]['id'] == $refObj->TypeLink->TypeInfos['id'] || $typeids[$i]['id'] == $refObj->TypeLink->TypeInfos['topid'] ){ $pv->Fields['currentstyle'] = $currentstyle ? $currentstyle : 'current'; } else{ $pv->Fields['currentstyle'] = ''; }
添加了$typeids[$i]['id'] ==$refObj->TypeLink->TypeInfos['topid']后
对二级栏目也起作用!!
调用方法(格式):
{dede:channelartlist typeid='2' currentstyle='current'} <li class='{dede:field.currentstyle/}'><a href='{dede:field name='typeurl'/}'>{dede:field name='typename'/}</a></li> ..... {/dede:channelartlist}
注解:如果是当前栏目则 li 的class属性会显示current,即<li class='current'>,否则显示class=''
你也可以将调用标签中的 currentstyle='这里改为你需要的类名',如 currentstyle='mycur'
那么,文章开头的代码就变成了:
{dede:channelartlist type='top' row='10' currentstyle="mycur"} <li class='{dede:field.currentstyle/}'><a href='[field:typeurl/]'>[field:typename/]</a></li> <dl> {dede:channel type='son' row='10'} <dd><a href="[field:typelink/]">[field:typename/]</a></dd> {/dede:channel} </dl> {/dede:channelartlist}
very good !
========================
网上找的一级二级三级菜单的调用方式
=======================
织梦导航栏的调用方法之顶级栏目、二级栏目及三级栏目
一、顶级栏目调用(循环,调所有的)
{dede:channel type='top' currentstyle="<li class='thisclass'><a href='~typelink~'>~typename~</a> </li>"} <li><a href='[field:typeurl/]'>[field:typename/]</a></li> {/dede:channel}
注释(参数):
typeid='0' 栏目ID;reid = '0' 上级栏目ID;row = '100' 调用栏目数;col = '1' 分多少列显示(默认为单列);type = 'son | sun' son表示下级栏目,self表示同级栏目,top顶级栏目; currentstyle = '当前栏目样式'。
这种方法会把后台的顶级栏目都调用出来,如果想有些栏目不被调用出来,可以加上参数typeid='所要调用栏目的id'。
对于调用指定的栏目可以用下面的标签:
{dede:type typeid=‘指定栏目的id’}<a href="[field:typelink /]">[field:typename /]</a>{/dede:type}
二、顶级和二级栏目同时调用(循环,调所有的)
{dede:channelartlist typeid='1,2,3,4,5,6,7,8' row='10'} <li class="tab dropdown"><a id="{dede:field name='id'/}" href="{dede:field name='typeurl'/}" class="tablink arwlink">{dede:field name='typename'/}</a> <ul class="subnav"> {dede:channel type='son' noself='yes'} <a href="[field:typelink/]">[field:typename/]</a> {/dede:channel} </ul> </li> {/dede:channelartlist}
注释(参数):typeid指定了要调用的顶级栏目ID号。li、a、u等菜单结构可自己修改。当前样式也可通过class来定义。
三、一级二级三级一起调用栏目的代码(看了下代码,这是指定单个ID的,不方便做自动生成的全导航栏!总比html写死要好一些吧!)
所有代码COPY来的,格式化了一下,方便看,自己去研吧。
<li> <h3> {dede:type typeid='2'} <!--顶级栏目的调用--> <a href='[field:typelink/]' class="depth_1">[field:typename/]</a> {/dede:type} </h3> <ul class="children" style="display: none; "> {dede:channelartlist typeid='top' typeid='2'} <!--二级栏目和三级栏目的调用这里typeid='子栏目所属的顶级栏目的id'--> <li><h3 ><a href='{dede:field name='typeurl'/}' class="depth_2"><span class="icon10"></span>{dede:field name='typename'/}</a></h3> <ul> {dede:sql sql='Select * from dede_arctype where reid=~id~ ORDER BY id limit 0,20'} <!--limit 起始三级栏目id 显示栏目的条数--> <li> <a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]" class="depth_3">[field:typename/]</a> </li> {/dede:sql} </ul> </li> {/dede:channelartlist} </ul> </li>
四、只调指定ID的下级栏目(???)
{dede:channelartlist typeid=3 } <dd> <dl> <dt><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></dt> <dd> <ul> {dede:sql sql='Select * from `dede_arctype` where reid=~id~ ORDER BY id'} <li>· <a href="[field:typedir function="cn_substr(@me,200,9) " /]">[field:typename/]</a></li> {/dede:sql} </ul> </dd> </dl> </dd> {/dede:channelartlist}
发表评论(不用注册哟!)