在制作 Dedecms CMS 模板时,使用 {dede:channelartlist} 自动调用栏目内容是一项常见操作。然而,在实际应用中,我们可能会遇到某些栏目不需要被调用的情况,例如“关于我们”或“联系地址”等无持续更新的栏目。为了实现排除特定栏目的功能,我们需要对 Dedecms 的源代码进行修改,使 {dede:channelartlist} 支持排除指定的 typeid。
以下是具体的操作步骤:
第一步:打开文件
找到并打开 Dedecms 核心目录下的文件:\\\\include\\\\taglib\\\\channelartlist.lib.php
第二步:修改 $attlist 参数
搜索以下代码:
$attlist = 'typeid|0,row|20,cacheid|';;
将其修改为:
$attlist = 'typeid|0,row|20,cacheid|,notypeid|0'; // 添加了排除typeid的参数 - notypeid

第三步:添加排除逻辑
继续查找以下 SQL 查询语句:
$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 的功能:
// 否定指定ID
if($notypeid != 0) {
    $tpsql = $tpsql . " and not(id in($notypeid)) ";
}

第四步:模板调用
完成上述修改后,您可以在模板中使用以下语法来调用栏目,同时排除指定的栏目 ID:
{dede:channelartlist typeid='7' notypeid='8'}
其中,notypeid='8' 表示排除 ID 为 8 的栏目。如果需要排除多个栏目,可以将 notypeid 的值设置为以逗号分隔的 ID 列表,例如:notypeid='8,9,10'。
注意事项:
1. 如果只需要使用 notypeid 或 typeid 单独功能,可以分别设置对应的参数。
2. 修改核心文件前,请务必做好备份,以免因误操作导致系统异常。
3. 此方法适用于 Dedecms 的默认版本,如果您使用的是自定义版本,请根据实际情况调整。 通过以上步骤,您可以轻松实现 {dede:channelartlist} 调用时排除特定栏目的功能,从而更好地满足网站设计和功能需求。