dede同时调用一级和二级菜单(三级),让channelartlist标签支持currentstyle的当前状态属性,完美解决

织梦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}





如果文章对您有帮助|有启发|有共鸣|有“爽了”,请随意打赏。您的支持是我的动力和价值的体现。

----------我不是街头卖艺者,但我渴望被打赏,博客要生存下去不容易。
----------我不是酒店服务生,但我渴望被打赏,博主也有妻儿子女一家子人。
----------我不是乞丐叫花子,但我渴望被打赏,渴望被打赏的价值认同感。
----------我不是建筑搬运工,但我渴望被打赏,我是蜜蜂我阅读/挑选/整合/转载/传播。
----------我不是作家或教授,但我渴望被打赏,咱中国人也能主动为知识/为受益而付费。

感谢土豪的打赏!


一码支持:微信/支付宝

打赏qoogle的二维码


分享,也是您对我的热力支持。谢谢!

内容版权声明:除转载分类下的文章来源网络(直转或整合而成),其它皆为本站原创文章。

转载注明出处:http://qoogle.cn/?id=81

发表评论(不用注册哟!)

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。