修改dede源码,让dede:channelartlist排除指定typeid

找到 \include\taglib\channelartlist.lib.php,   查找 $attlist


$attlist = 'typeid|0,row|20,cacheid|';
修改为:
$attlist = 'typeid|0,row|20,cacheid|,notypeid|0';   [此处添加了一个所要排除typeid的参数---notypeid]

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

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

//否定指定ID
if($notypeid!=0) {
     $tpsql = $tpsql."and not(id in($notypeid)) ";
}

模板调用:
{dede:channelartlist typeid ='114' notypeid='123,124,125,126,127,128'}
其中notypeid='123,124,125,126,127,128' 中的 123,124,125,126,127,128 为114的子栏目

点击这里给我发消息

修改后的channelartlist.lib.php

<?php

if(!defined('DEDEINC')) exit('Request Error!');
require_once(DEDEINC.'/arc.partview.class.php');

function lib_channelartlist(&$ctag,&$refObj)
{
	global $dsql,$envs,$_sys_globals;

	//处理标记属性、innertext
	$attlist = 'typeid|0,row|20,cacheid|,notypeid|0';
	FillAttsDefault($ctag->CAttribute->Items,$attlist);
	extract($ctag->CAttribute->Items, EXTR_SKIP);
	$innertext = trim($ctag->GetInnerText());
	$artlist = '';
	//读取固定的缓存块
	$cacheid = trim($cacheid);
	if($cacheid !='') {
		$artlist = GetCacheBlock($cacheid);
		if($artlist!='') return $artlist;
	}
	
	if(empty($typeid))
	{
		$typeid = ( !empty($refObj->TypeLink->TypeInfos['id']) ?  $refObj->TypeLink->TypeInfos['id'] : 0 );
	}
	
	if($innertext=='') $innertext = GetSysTemplets('part_channelartlist.htm');
	$totalnum = $row;
	if(empty($totalnum)) $totalnum = 20;

	//获得类别ID总数的信息
	$typeids = array();
	if($typeid==0 || $typeid=='top') {
		$tpsql = " reid=0 And ispart<>2 And ishidden<>1 And channeltype>0 ";
	}
	else
	{
		if(!ereg(',',$typeid)) {
			$tpsql = " reid='$typeid' And ispart<>2 And ishidden<>1 ";
		}
		else {
			$tpsql = " id in($typeid) And ispart<>2 And ishidden<>1 ";
		}
	}
	
	//否定指定ID
	if($notypeid!=0) {
		$tpsql = $tpsql."and not(id in($notypeid)) ";
	}
	
	$dsql->SetQuery("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath 
	                                        from `#@__arctype` where $tpsql order by sortrank asc limit $totalnum");
	$dsql->Execute();
	while($row = $dsql->GetArray()) {
		$typeids[] = $row;
	}

	if(!isset($typeids[0])) return '';

	$GLOBALS['itemindex'] = 0;
	$GLOBALS['itemparity'] = 1;
	for($i=0;isset($typeids[$i]);$i++)
	{
		$GLOBALS['itemindex']++;
		$pv = new PartView($typeids[$i]['id']);
		$pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]);
		$pv->SetTemplet($innertext,'string');
		$artlist .= $pv->GetResult();
		$GLOBALS['itemparity'] = ($GLOBALS['itemparity']==1 ? 2 : 1);
	}
	//注销环境变量,以防止后续调用中被使用
	$GLOBALS['envs']['typeid'] = $_sys_globals['typeid'];
	$GLOBALS['envs']['reid'] = '';
	if($cacheid !='') {
		WriteCacheBlock($cacheid, $artlist);
	}
	return $artlist;
}
?>

你可能感兴趣的:(dede源码修改)