最近在改版织梦系统做的网站时碰到一个问题,我需要调取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'}
发表于2017-05-22 at 05:21 沙发
迷糊糊的看完,算是看懂了。你越来越厉害了,成为一个对社会对祖国有用的人才
@yang@yang:为建设四化做贡献。。。胸前的红领巾更鲜艳了。。。嗯。。。