DEDE织梦如何排除子栏目只显示顶级栏目列表内容

 晓兔   2017-05-18 06:59   3,310 人飘过  2 条评论

      最近在改版织梦系统做的网站时碰到一个问题,我需要调取A这个顶级栏目下的文章列表,但是并不想让A栏目下1.2.3这几个子栏目的文章也出现在列表上,而使用织梦现成的标签,无论如何都做不到这一点,找了很多方法,最后只能通过修改程序本身的文件来实现这一功能,就是给arclist标签增加notypeid属性,排除相应的栏目ID,实现栏目过滤。好在只需要修改一个文件就可以了,比较简单,这里我就分享一下找到的方法(感谢原作者,不知道原作者是谁- -),亲测可用:

打开/include/taglib/arclist.lib.php文件,找这段代码(大概在129行):


return lib_arclistDone ( $refObj, $ctag, $typeid, $ctag->GetAtt('row'), $ctag->GetAtt('col'), $titlelen, $infolen, $ctag->GetAtt('imgwidth'), $ctag->GetAtt('imgheight'), $listtype, $orderby, $ctag->GetAtt('keyword'), $innertext, $envs['aid'], $ctag->GetAtt('idlist'), $channelid, $ctag->GetAtt('limit'), $flag,$ctag->GetAtt('orderway'), $ctag->GetAtt('subday'), $ctag->GetAtt('noflag'), $tagid,$pagesize,$isweight );


最后的括号前面也就是$isweight后面加上(注意别忘了逗号)

,$ctag->GetAtt('notypeid')


然后再找到这一段代码(大概在168行):

function lib_arclistDone(&$refObj, &$ctag, $typeid=0, $row=10, $col=1, $titlelen=30, $infolen=160, $imgwidth=120, $imgheight=90, $listtype='all', $orderby='default', $keyword='', $innertext='', $arcid=0, $idlist='', $channelid=0, $limit='', $att='', $order='desc', $subday=0, $noflag='',$tagid='', $pagesize=0, $isweight='N',$notypeid=0)


最后的括号前面也就是$notypeid=0后面加上(注意别忘了逗号)

,$notypeid=0


最后再找到这一句:

$orwheres[] = ' arc.arcrank > -1 ';

在其前面增加以下代码:


if(!empty($notypeid)) {
$orwheres[] = " and arc.typeid NOT IN (".GetSonIds($notypeid).")";
}


    这样就大功告成了,可以愉快地调取指定的顶级栏目内容,那些子栏目内容再也不会出来捣乱了。在使用arclist标签时,添加notypeid='X'(X代表栏目ID,可以用英文逗号分隔多个栏目ID)就可以排除掉不想显示的子栏目了。当然,在调用整体的多个栏目时也可以排除掉不需要的栏目,并非仅限于子栏目。

    使用方法参考:{dede:arclist typeid='99' row='10' notypeid='1,2,3'}

本文地址:https://www.loveif.com/post/566.html
版权声明:本文为原创文章,版权归 晓兔个人博客 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

  1. yang
    yang 【镇长】 @回复

    迷糊糊的看完,算是看懂了。你越来越厉害了,成为一个对社会对祖国有用的人才

    • 懒小爱
      懒小爱2017-05-25 at 02:41  回复

      @yang@yang:为建设四化做贡献。。。胸前的红领巾更鲜艳了。。。嗯。。。