在开发和优化 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' 表示排除 typeid 为 8 的栏目。如果 8 是 7 的子栏目,则该设置将生效。

需要注意的是,notypeidtypeid 可以分别独立使用。例如,如果您只想排除某些特定的栏目,而不需要指定一个主栏目,可以直接使用 notypeid 参数。

通过这样的修改,您可以更加灵活地控制 Dedecms 模板中的栏目调用逻辑,从而更好地满足网站的实际需求。

希望这篇文章能帮助您更高效地进行 Dedecms 网站开发!如果您有任何疑问,请随时留言咨询。