在织梦CMS中,可以通过为{dede:artlist}
标签增加notypeid
属性来过滤特定栏目。
织梦CMS(DedeCMS)是一款广泛使用的内容管理系统,其标签功能非常强大,通过这些标签可以在前台调用各种形式的后台数据,有时候我们需要在调用文章列表时排除某些特定的栏目,为了实现这一需求,我们可以对织梦CMS的arclist标签进行二次开发,增加notypeid属性来实现栏目过滤。
修改步骤
1、打开文件:
找到并打开/include/taglib/arclist.lib.php
文件。
2、修改函数返回值:
在文件中找到以下代码段(大约在第130行):
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')
,如下所示:
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') );
3、修改函数参数:
在文件中再次找到以下代码段(大约在第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
,如下所示:
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)
4、添加条件过滤:
在文件中再次找到以下代码段(大约在第321行):
$orwheres[] = ' arc.arcrank > 1 ';
在其后面增加以下代码:
if(!empty($notypeid)) { $orwheres[] = " and arc.typeid NOT IN (".GetSonIds($notypeid).")"; }
5、保存文件:
完成上述修改后,保存文件。
使用方法
在模板中使用arclist标签时,可以添加notypeid属性来排除指定栏目的文章。
{dede:arclist row=6 orderby=pubdate type='image.' imgwidth='108' imgheight='150' channelid='1' notypeid='9'}
如果需要过滤多个栏目,可以使用逗号分隔多个栏目ID,
{dede:arclist row=6 orderby=pubdate type='image.' imgwidth='108' imgheight='150' channelid='1' notypeid='9,10,11'}
注意事项
在进行上述修改前,请确保已备份原文件,以防修改出错时能够恢复。
修改完成后,建议在测试环境中进行充分测试,确保功能正常后再应用到生产环境。
FAQs
问题1:如何撤销对arclist标签的修改?
答:要撤销对arclist标签的修改,只需将之前修改过的/include/taglib/arclist.lib.php
文件中的相关部分还原为原始状态即可,具体步骤如下:
1、还原函数返回值:
将以下代码段还原为原始状态:
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 );
2、还原函数参数:
将以下代码段还原为原始状态:
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')
3、移除条件过滤:
将以下代码段还原为原始状态:
$orwheres[] = ' arc.arcrank > 1 ';
4、保存文件:
完成上述还原后,保存文件。
问题2:如何在多语言网站中使用notypeid属性?
答:在多语言网站中使用notypeid属性的方法与普通网站相同,只需在模板中使用arclist标签时,添加notypeid属性来排除指定栏目的文章即可。
{dede:arclist row=6 orderby=pubdate type='image.' imgwidth='108' imgheight='150' channelid='1' notypeid='9'}
如果需要过滤多个栏目,可以使用逗号分隔多个栏目ID,
{dede:arclist row=6 orderby=pubdate type='image.' imgwidth='108' imgheight='150' channelid='1' notypeid='9,10,11'}
这样,无论是在哪种语言环境下,都可以实现对指定栏目的过滤。
属性名 | 描述 | 示例 |
notypeid | 通过指定类型ID过滤不显示该类型ID对应的文章 | {dede:artlist typeid='' notypeid='1,2,3'}/ |
notypeid的值可以是单个ID或多个ID,用逗号分隔 | 排除ID为1、2、3的文章,则设置为notypeid=’1,2,3′ | |
若不指定notypeid属性,则不进行类型ID过滤 | {dede:artlist typeid=''}/ | |
notypeid属性可以与typeid属性结合使用,进行更精确的过滤 | {dede:artlist typeid='1' notypeid='2,3'}/ |