修改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 `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 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 `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
;
}
?>
上一篇:修改{dede:list}标签后,可支持权重排序、flag标 下一篇:dedecms去掉编辑器自动加div的方法即大小字情况