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之间用逗号分隔 |
代码仅供参考,具体使用时可能需要根据实际情况进行调整。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1200833.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复