DEDEcms系统制作网站时,它本身提供了很多标签,但要想自己在使用过程中满足自己的特别需求,还得二次开发改它的内核。如需要用到调用当前栏目的顶级栏目下的所有子栏目,不指定typeid,那么应该如何操作呢?
应用场景:
导航功能,Dede自身提供的方法只能通过指定父栏目id来实现,一个站很多地方需要只调用当前栏目的顶级栏目下的所有子栏目,不指定typeid,那模板代码怎么实现?
1. 找到\include\taglib\channelartlist.lib.php
找到: $attlist = ‘typeid|0,row|20,cacheid|’;
修改为:$attlist = ‘typeid|0,row|20,cacheid|,type|’; //这边加个 type 实现 在子栏目下调用 同级子栏目的信息
2. 修改66行处的代码
if($typeid==0 || $typeid==’top’) {
$tpsql = ” reid=0 AND ispart<>2 AND ishidden<>1 AND channeltype>0 “;
}
在它前面加个if条件判断,修改为:
if($type=='reid') {
$reid = $refObj->TypeLink->TypeInfos['reid'];
if( $reid == 0 ){
$tpsql = " reid='$typeid' AND ispart<>2 AND ishidden<>1 ";
}else{
$tpsql = " reid=$reid AND ispart<>2 AND ishidden<>1 ";
}
}else if($typeid==0 || $typeid=='top'){
$tpsql = " reid=0 AND ispart<>2 AND ishidden<>1 AND channeltype>0 ";
}
保存上面文件。然后在列表页或者内容页使用
{dede:channelartlist type=’reid’ row=’1′}
底层循环代码
{/dede:channelartlist}
就可以方便调用了.
示例代码:
{dede:channelartlist type=’reid’ row=’1′}
{dede:channel type=’son’}