织梦dedecms全站文章列表如何排除某个栏目dede arclist 排除栏目
织梦dedecms全站文章列表如何排除某个栏目【解决方法】
我们都知道织梦标签功能非常的强大,但如果栏目太多时,有的栏目文章不需要在首页显示,或者不参与排序和推荐时,只用typeid过滤和维护起来就相当麻烦,下面教大家怎么解决织梦文章列表排除某个特定栏目的方法。
既然arclist支持flag和noflag,那么应该也可以支持typeid和notypeid吧?但是经过一番研究,再跟踪了一下源码,发现织梦默认并不支持notypeid,于是只有自己动手修改了,方法非常简单仅需两步就可以,下面就给大家分享一下自己的成果。
第一步:首先找到并打开/include/taglib/arclist.lib.php文件,
在大概第130行的位置找到下面这段代码: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);
在最后面的括弧前面加上如下代码(注意前面的半角逗号):
,$ctag->GetAtt('notypeid')
第二步:然后再找到这一段代码:
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
第三步:最后在这个函数里面找到下面这一句代码:
$orwheres[] = ' arc.arcrank > -1 ';
在其前面添加如下代码:
if(!empty($notypeid)){$orwheres[] = " and arc.typeid NOT IN (".GetSonIds($notypeid).")";}
到这里,所有代码就修改完毕了。保存之后就在arclist标签里试试添加一个notypeid属性吧。对于网站栏目多,内容显示又错综复杂的情况,这样的属性还是蛮实用的。
下面是示例:
{dede:arclist row=6 orderby=pubdate type='image.' channelid='1' notypeid='9'}
