在使用Dedecms进行CMS模板开发时,经常会用到 dede:channelartlist 标签来自动调用栏目内容。然而,在实际应用中,我们可能希望排除某些不需要显示的栏目,例如“关于我们”或“联系我们”等静态页面。为了实现这一需求,我们需要对Dedecms的核心代码进行修改,使 dede:channelartlist 支持排除指定的typeid。

首先,打开文件:
\\\\include\\\\taglib\\\\channelartlist.lib.php
找到以下代码:

$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='7' notypeid='8'}

其中,notypeid='8' 表示排除ID为8的子栏目。如果您只需要单独使用 notypeidtypeid,也可以分别设置它们的值。

通过以上步骤,您可以轻松实现 dede:channelartlist 的自定义功能,灵活控制栏目的显示与隐藏。这对于优化网站结构和用户体验具有重要意义。

注意:在修改核心文件之前,请确保备份原始文件,以防止因误操作导致系统无法正常运行。