经常会遇到需要调用多个指定的顶级栏目导航,那我们如何实现呢?关于DEDECMS实现嵌套获取栏目及其子栏目列表的问题,在论坛找到了以前版本的修改方法,于是修改了一下,现在分享给大家。请看实例代码:
修改文件:includetaglib目录下的channel.lib.php,请将以下代码全部复制替换上述文件。
以下为引用的内容:
<?phpfunction 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
From `dede_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 .= "<dl>rn";
for($j=0;$j<$col;$j++)
{
if($col>1) $likeType .= "<dd>rn";
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($row);
$linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);
$linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);
$linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
$linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
$likeType .= $linkOkstr;
}
}else
{
$row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
if(is_array($dtp2->CTags))
{
foreach($dtp2->CTags as $tagid=>$ctag){
if(isset($row[$ctag->GetName()]))
{
$dtp2->Assign($tagid,$row[$ctag->GetName()]);
}
elseif (preg_match('/^sonchannel[0-9]*$/',$ctag->GetName()))
{
$dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql2));
}
}
}
$likeType .= $dtp2->GetResult();
}
}
if($col>1) $likeType .= "</dd>rn";
$GLOBALS['autoindex']++;
}//Loop Col
if($col>1)
{
$i += $col - 1;
$likeType .= " </dl>rn";
}
}//Loop for $i
reset($dsql2);
$dsql->FreeResult();
return $likeType;
}
function lib_channel_son($ctag,$typeid = 0,$dsql2)
{
$attlist = "row|100,col|1,currentstyle|";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$innertext = $ctag->GetInnerText();
$dsql3 = clone $dsql2;
$likeType = '';
//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";
//And id<>'$typeid'
$dtp2 = new DedeTagParse();
$dtp2->SetNameSpace("field","[","]");
$dtp2->LoadSource($innertext);
$dsql2->SetQuery($sql);
$dsql2->Execute();
$line = $row;
for($i=0;$i < $line;$i++)
{
if($col>1) $likeType .= "<dl>rn";
for($j=0;$j<$col;$j++)
{
if($col>1) $likeType .= "<dd>rn";
if($row=$dsql2->GetArray())
{
$row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
if(is_array($dtp2->CTags))
{
foreach($dtp2->CTags as $tagid=>$ctag){
if(isset($row[$ctag->GetName()]))
{
$dtp2->Assign($tagid,$row[$ctag->GetName()]);
}
elseif (preg_match('/^sonchannel[0-9]*$/',$ctag->GetName()))
{
$dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql3));
}
}
}
$likeType .= $dtp2->GetResult();
}
if($col>1) $likeType .= "</dd>rn";
}//Loop Col
if($col>1)
{
$i += $col - 1;
$likeType .= " </dl>rn";
}
}//Loop for $i
reset($dsql3);
$dsql2->FreeResult();
return $likeType;
}
?>
注:如果你安装的dedecms使用的表前缀进行修改过,需要把上面代码中的 dede_arctype 前缀修改掉才行。
模板调用 [field:sonchannel0] [/field:sonchannel0] 这个是用来取子栏目用得(使用[sonchannel+数字] 作为标签名是为了防止嵌套的时候无法正确解析标签)
这个的作用就是当你的栏目有很多子栏目 无限分级的时候方便你取子栏目的
例子
{dede:channel type='son' typeid='22'}[field:typename/]
<ul>
[field:sonchannel0]
<li><a href="[field:typelink/]">[field:typename/]</a></li>
[field:sonchannel1]
<li><a href="[field:typelink/]">---[field:typename/]</a></li>
[field:sonchannel2]
<li><a href="[field:typelink/]">===[field:typename/]</a></li>
[field:sonchannel3]
<li><a href="[field:typelink/]">===[field:typename/]</a></li>
[/field:sonchannel3]
[/field:sonchannel2]
[/field:sonchannel1]
[/field:sonchannel0]
</ul>
{/dede:channel} 本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除! 织梦标签
相关文档推荐
织梦dedecms调用会员详细字段信息 织梦如何调用会员详细信息: 在include/extend.func.php function GetMemberInfos($fields,$mid){ global $dsql; if($mid = 0){ $revalue = Error; } else{ $row=$dsql-GetOne(sele ct * from dede_member_person where mid ={$mid}); if(!is_array($row)){ 织梦DeDeCMS文档发布的默认来源与作者修改 在优化织梦DeDeCMS的个人博客时往往需要进行二次开发,在发表图集和文章时总是没发表一篇就要去更改文章作者和来源,操作繁琐非常麻烦,能简单就简单,无非就是修改织梦DeDeCMS图集与文章的默认来源于作者,开始之前需要提到的是图集发布于文章发布相关的文 织梦dede后台按关键词搜索文章内容的方法 织梦后台所有文档默认只能按标题名称搜索对应关键词,有时候要搜索到的关键词并不存在标题中,而是存在文章内容里面。 那么如何搜索带有关键词的文章内容的文章呢? 打开/dede/content_list.php在185行找到 $whereSql .= AND ( CONCAT(arc.title,arc.writer) 织梦会员邮件验证通知在https域名下验证链接404错误的解决方法 织梦会员邮件验证通知在https域名下验证链接错误,程序默认只支持在http://的站点,我们需要改成让邮件支持http和https均可正常 以下文件如果你的网站里有的的没有,可跳过 1、打开 /member/index_do.php 找到,大概在31行 $url = http://.preg_replace(#/ dedecms织梦arclist标签noflag属性过滤多个参数 织梦dedecms系统arclist标签noflag属性默认是只能过滤一个参数,比如过滤推荐是noflag=c,过滤有图片的文章是noflag=c,在模板制作过程中,有时候我们为了seo和避免重复,需要过滤多个参数。今天小编就来跟大家讲讲织梦dedecms系统noflag过滤多个参数。 打开 dedecms修改后台编辑器参数GetEditor的方法 dedecms修改后台编辑器参数GetEditor dedecms通过include/helpers/util.helper.php function GetEditor($fname, $fvalue, $nheight=350, $etype=Basic, $gtype=print, $isfullpage=FALSE) 函数调用文本编辑器,个个参数可参考该方法的注释信息, * 获取编辑器 织梦安装使用织梦二次开发织梦优化织梦标签dedecms教程织梦安全- • 织梦dedecms tag标签使用方法...
- • 织梦title字数限制的两种方法...
- • 织梦cms调用列表分页标签说明...
- • 织梦dede修改文章默认来源 责任编辑...
- • dede 下拉菜单的实现方法-织梦下拉菜...
- • dedecms教程:dede通过关键词调用相...
- • 织梦标签:hotwords 搜索关键词...
- • 织梦标签:sql SQL查询标签...
- • 织梦标签:prenext 获取上一篇、下一...
- • dede标签:arclist标签使用大全...
- • 织梦标签:type 指定栏目调用标签...
- • dedecms中的{dede:php}{/dede:php}的...
- • 织梦dedecms tag标签使用方法...
- • 织梦title字数限制的两种方法...
- • 织梦cms调用列表分页标签说明...
- • 织梦dede修改文章默认来源 责任编辑...
- • dede 下拉菜单的实现方法-织梦下拉菜...
- • dedecms教程:dede通过关键词调用相...
- • 织梦标签:hotwords 搜索关键词...
- • 织梦标签:sql SQL查询标签...
- • 织梦标签:prenext 获取上一篇、下一...
- • dede标签:arclist标签使用大全...
- • 织梦标签:type 指定栏目调用标签...
- • dedecms中的{dede:php}{/dede:php}的...