发布时间:2026-02-05 23:59:43 浏览次数:8
在织梦dedecms中,要调用指定三级子栏目或多个栏目导航,可以使用以下代码:,,“php,{dede:channel type='top' row='10' currentstyle='yes'},[field:typename/],, {dede:channel type='son' row='10' currentstyle='yes'},[field:typename/], {dede:channel type='son3' row='10' currentstyle='yes'},[field:typename/], {/dede:channel}, {/dede:channel},,{/dede:channel},`,,这段代码会生成一个包含指定三级子栏目或多个栏目导航的列表。请根据实际需求修改row`属性的值,以控制显示的栏目数量。
在织梦dedecms中,调用指定三级子栏目或多个栏目导航的方法主要通过修改channel.lib.php文件和编写特定的标签代码实现,以下是详细的步骤和示例:
调用顶级、二级和三级栏目的方法
1、调用顶级栏目:
使用以下标签可以调用顶级栏目:
{dede:channel type='top' currentstyle="<li class='thisclass'><a href='~typelink~'>~typename~</a> </li>"} 参数说明:typeid表示栏目ID;reid表示上级栏目ID;row表示调用栏目数;col表示分多少列显示;type表示类型(son表示下级栏目,self表示同级栏目,top表示顶级栏目);currentstyle表示应用样式。
2、调用带有二级子栏目的栏目:
使用以下标签可以调用带有二级子栏目的栏目:
{dede:channelartlist typeid='1,2,3,6,7,10,8,11' 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}对于没有子栏目的顶级栏目,可以使用以下标签:
{dede:type typeid=‘指定栏目的id’} <li> <a href="[field:typelink /]">[field:typename /]</a> </li> {/dede:type}3、调用带有三级子栏目的栏目:
使用以下标签可以调用带有三级子栏目的栏目:
<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'} <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'} <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>修改channel.lib.php文件以实现多级导航
1、修改文件路径:
修改includetaglib目录下的channel.lib.php文件。
2、替换代码:
将以下代码复制替换到channel.lib.php文件中:
function lib_channel(&$ctag,&$refObj) { global $_sys_globals,$envs,$dsql; $attlist = "typeid|0,reid|0,row|100,col|1,type|son,currentstyle|"; FillAttsDefault($ctag>CAttribute>Items,$attlist); extract($ctag>CAttribute>Items, EXTR_SKIP); $innertext = $ctag>GetInnerText(); $cacheid = trim($cacheid); if($cacheid !='') { $likeType = GetCacheBlock($cacheid); if($likeType != '') return $likeType; } $reid = 0; $topid = 0; if(empty($typeid) && $envs['typeid']!=0) { $typeid = $envs['typeid']; $reid = $envs['reid']; }else{ $reid=0; } if($type==''||$type=='sun') $type="son"; if($innertext=='') $innertext = GetSysTemplets("channel_list.htm"); if($reid==0 && $typeid>0) { $dbrow = $dsql>GetOne("select reid From dede_arctype where id='$typeid' "); if(is_array($dbrow)) $reid = $dbrow['reid']; } $likeType = ''; if($type=='top') { $sql = "select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description From dede_arctype where reid=0 And ishidden<>1 order by sortrank asc limit 0,$row"; } else if($type=="son") { //if($_sys_globals['typeid']>0) $typeid = $_sys_globals['typeid']; if($typeid==0) { return ''; } $sql = "select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description From dede_arctype where reid='$typeid' And ishidden<>1 order by sortrank asc limit 0,$row"; } else if($type=="self") { if($reid==0) { return ''; } $sql = "select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description Fromdede_arctype where reid='$reid' And ishidden<>1 order by sortrank asc limit 0,$row"; } //And id<>'$typeid' $needRel = false; $dtp2 = new DedeTagParse(); $dtp2>SetNameSpace("field","[","]"); $dtp2>LoadSource($innertext); $dsql2 = clone $dsql; $dsql>SetQuery($sql); $dsql>Execute(); $line = $row; //检查是否有子栏目,并返回rel提示(用于二级菜单) if(ereg(':rel', $innertext)) $needRel = true; if(empty($sql)) return ''; $dsql>SetQuery($sql); $dsql>Execute(); $totalRow = $dsql>GetTotalRow(); $GLOBALS['autoindex'] = 0; for($i=0;$i < $line;$i++) { if($col>1) $likeType .= "for($j=0;$j }else{ r"; if($row=$dsql>GetArray()) { $row['sonids'] = $row['rel'] = ''; if($needRel) { $row['sonids'] = GetSonIds($row['id'], 0, false); if($row['sonids']=='') $row['rel'] = ''; else $row['rel'] = " rel='dropmenu{$row['id']}'"; } //处理同级栏目中,当前栏目的样式 if( ($row['id']==$typeid || ($topid==$row['id'] && $type=='top') ) && $currentstyle!='' ) { if($currentstyle!='') { $linkOkstr = $currentstyle; $row['typelink'] = GetOneTypeUrlA } } }//end for line return $likeType; }//end func这段代码可以帮助实现根据不同类型获取顶级栏目和子栏目列表,适用于无限极分类,通过实例代码展示了如何使用[type]参数控制展示层级和样式,适合多级导航需求。
相关问答FAQs
1、如何在DEDECMS中调用多个指定的顶级栏目导航?:要在DEDECMS中调用多个指定的顶级栏目导航,可以使用以下标签:
{dede:type typeid='指定栏目的id'} <a href="[field:typelink /]">[field:typename /]</a> {/dede:type} typeid参数用于指定要调用的顶级栏目的ID,如果有多个栏目需要调用,可以在页面上多次使用这个标签,每次指定不同的typeid值。
2、如何在DEDECMS中调用带有二级子栏目的栏目?:要在DEDECMS中调用带有二级子栏目的栏目,可以使用以下标签:
{dede:channelartlist typeid='顶级栏目的id' 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,row参数用于指定调用的栏目数量,这段代码会生成一个带有二级子栏目的栏目导航,包括顶级栏目及其所有子栏目。
| 调用方式 | 代码示例 | 说明 |
| 调用指定三级子栏目导航 | {dede:channel type='son' id='1' subid='2' /} | type=’son’ 表示调用子栏目,id=’1′ 表示调用一级栏目ID,subid=’2′ 表示调用二级栏目ID的三级子栏目导航 |
| 调用多个栏目导航 | {dede:channel type='son' id='1,2,3' /} | type=’son’ 表示调用子栏目,id=’1,2,3′ 表示调用多个一级栏目ID的子栏目导航,多个ID之间用逗号分隔 |
| 调用指定三级子栏目导航(条件筛选) | {dede:channel type='son' id='1' subid='2' where='keywords="关键词"' /} | type=’son’ 表示调用子栏目,id=’1′ 表示调用一级栏目ID,subid=’2′ 表示调用二级栏目ID的三级子栏目导航,where属性用于条件筛选,keywords表示关键词 |
| 调用多个栏目导航(条件筛选) | {dede:channel type='son' id='1,2,3' where='keywords="关键词"' /} | type=’son’ 表示调用子栏目,id=’1,2,3′ 表示调用多个一级栏目ID的子栏目导航,where属性用于条件筛选,keywords表示关键词,多个ID之间用逗号分隔 |
代码仅供参考,具体使用时可能需要根据实际情况进行调整。