如何在织梦dedecms中调用特定的三级子栏目或多个栏目进行导航设置?

发布时间: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之间用逗号分隔

代码仅供参考,具体使用时可能需要根据实际情况进行调整。

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477