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

1970-01-01    来源:

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

找到 \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 `dede_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 ispart2 And ishidden1 And channeltype>0 ";
????}
????else
????{
????????if(!ereg(',',$typeid)) {
????????????$tpsql = " reid='$typeid' And ispart2 And ishidden1 ";
????????}
????????else {
????????????$tpsql = " id in($typeid) And ispart2 And ishidden1 ";
????????}
????}
????
????//否定指定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 `dede_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;
}
?>
?
?

标签: isp

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:发布文章“下载远程图片”,缩略图片在限制尺寸之内

下一篇:手动添加一个函数,完美的实现任意字段调用