在开发和优化 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 的子栏目,则该设置将生效。
需要注意的是,notypeid 和 typeid 可以分别独立使用。例如,如果您只想排除某些特定的栏目,而不需要指定一个主栏目,可以直接使用 notypeid 参数。
通过这样的修改,您可以更加灵活地控制 Dedecms 模板中的栏目调用逻辑,从而更好地满足网站的实际需求。
希望这篇文章能帮助您更高效地进行 Dedecms 网站开发!如果您有任何疑问,请随时留言咨询。