织梦默认情况下顶级栏目的列表用{dede:list}调用文章,但有时候不想调用子栏目的内容。织梦系统有这个设置,找到
系统设置->系统基本参数->性能选项
在“上级列表是否包含子类内容”选择否即可。但这样是全局设置,不能对指定的栏目做单独操作。这里提供修改方法,两种标签{dede:arclist}和{dede:channelartlist}。
{dede:channelartlist}排除制定栏目
默认的写法
{dede:channelartlist typeid='10'} <a href="[field:arcurl/]">[field:title/]</a> {/dede:channelartlist}
这样的写法能控制调用具体哪个栏目下的文章,主要注意的是,{dede:channelartlist}同样能在列表页使用,和arclist用在列表页一样,不能分页。但{dede:channelartlist}还是会直接调用该指定栏目下的下级栏目内容。修改方法如下:
打开 /include/taglib/channelartlist.lib.php ,大概在第43行,找到:
$attlist = 'typeid|0,row|20,cacheid|';
修改为:
$attlist = 'typeid|0,row|20,cacheid|,notypeid|0'; // 此处添加了一个所要排除typeid的参数—notypeid
大概在第78行,找到:
$dsql->SetQuery("Selectid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath from `dede_arctype` where $tpsql order by sortrank asc limit $totalnum");
在该段代码上加上:
if($notypeid!=0) {
$tpsql = $tpsql."and not(id in($notypeid)) "; //否定指定ID
}
使用方法如下:
{dede:channelartlist notypeid='10'}排除了id为10的子栏目的调用
{dede:channelartlist typeid ='7' notypeid='8'}id为7的栏目中id为8的子栏目不调用
{dede:arclist}调用时排除指定栏目
打开/include/taglib/arclist.lib.php,找到
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 );
修改为
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')
修改为
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).")";
使用方法
{dede:arclist row='10' orderby='rand' notypeid='10'} 不调用栏目id为10的文章
{dede:arclist row='10' orderby='rand' notypeid='10,11,12'}不调用多个栏目的文章
织梦二次开发QQ群
本站客服QQ号:862782808(点击左边QQ号交流),群号(383578617) 如果您有任何织梦问题,请把问题发到群里,阁主将为您写解决教程!
转载请注明: 织梦模板 » 织梦如何排除不调用指定栏目的文章