2、notypeid排除指定栏目、文章

1、channelartlist标签 notypeid属性

channelartlist标签调用结果中排除指定子栏目数据的方法

织梦默认的channelartlist标签的调用结果没有排除指定栏目的功能,但如果需要,我们可以自己通过修改文件来添加这样的功能,具体修改方法如下:

找到并打开/include/taglib/channelartlist.lib.php文件,

在里面找到$attlist(约43行),将


$attlist = 'typeid|0,row|20,cacheid|';


修改为:


$attlist = 'typeid|0,row|20,cacheid|,notypeid|0';


注:上面修改后的代码添加了一个所要排除typeid的参数notypeid


然后找到如下代码(约79行):


$dsql->SetQuery("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath   from `dede_arctype` where $tpsql order by sortrank asc limit $totalnum");


在其前面添加(注意是在前面添加):


//排除指定栏目ID

if($notypeid!=0) {

$tpsql = $tpsql."and not(id in($notypeid)) ";

}


修改完成后保存。


在模板里面可通过如下方法调用:

{dede:channelartlist typeid ='3' notypeid='14,15'}


其中notypeid='14,15'中的14,15为ID为3的栏目下的两个子栏目,这样就可以调用ID为3的栏目下除id为14和15的所有子栏目了。


---------------------------------------------------------

2、arclist标签 notypeid属性

arclist标签调用结果中排除指定栏目数据的方法

如果我要调用如下图中ID为5的栏目下所有子栏目中标记属性为头条(即flag='h')的文章,但又不想调用ID为12的子栏目中标记为头条的文章,那么怎么办?

下图还好,只有ID为12、13、14这3个子栏目,如果,我可以写{dede:arclist typeid='13,14'  flag='h' row='1' titlelen='40' orderby='pubdate'}这样就不会调用ID为12的栏目了,但如果有100个子栏目呢,岂不是要写上100个,显示是不可取的。

2、notypeid排除指定栏目、文章_第1张图片


其实,如果能够这样调用,达到我们的目标了:

{dede:arclist typeid='5' notypeid='12' flag='h' row='1' titlelen='40' orderby='pubdate'}

(上述代码中,表示调用ID为5的栏目下所有子栏目中标记属性为头条,但唯独不调取ID为12这个子栏目。)


只是,织梦arclist标签支持flag、noflag属性,但并不支持notypeid属性,那怎么办?自己写吧!

打开/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 );

 

在最后的括号前面加上(注意下述代码中前面的逗号):

,$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


最后再找到这一句:

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


在其前面增加以下代码:

if(!empty($notypeid)) {

$orwheres[] = " and arc.typeid NOT IN (".GetSonIds($notypeid).")";

}


这样,代码就修改完毕了,我们就可以在模板中通过{dede:arclist typeid='5' notypeid='12' flag='h' row='1' titlelen='40' orderby='pubdate'}调用ID为5的栏目下所有子栏目中标记属性为头条,但唯独不调取ID为12这个子栏目了。


你可能感兴趣的:(notypeid属性,织梦栏目排除)