修改全局变量法(最常用、最简单)
这种方法的核心思想是:在调用文章列表之前,先定义一个全局变量,这个变量包含你想要调用的所有栏目ID,然后在 {dede:arclist} 标签中使用这个变量。

适用场景:在当前页面(通常是首页 index.htm)调用多个固定栏目的文章。
操作步骤:
-
找到并打开文件 打开您的网站根目录下的
include/common.inc.php文件。 -
添加全局变量 在文件末尾,
?>标签的前面,添加如下代码:// 定义多个栏目ID,用英文逗号隔开 // 我们要调用栏目ID为 1, 3, 5 的文章 $GLOBALS['typeid'] = '1,3,5';
代码解释:
(图片来源网络,侵删)$GLOBALS['typeid']:定义一个全局变量typeid。'1,3,5':这是你想要调用的栏目ID,必须用英文逗号 分隔,你需要替换成你自己的栏目ID。
-
在模板文件中使用 打开你的首页模板文件
index.htm,在你想要显示文章列表的地方,使用以下代码:{dede:arclist titlelen='30' row='10'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span> </li> {/dede:arclist}代码解释:
dede:arclist:这是 DedeCMS 最核心的文章列表调用标签。titlelen='30'长度,最多显示30个字符。row='10':调用文章的数量,共10篇。- 关键点:我们没有在
typeid属性中写任何ID,因为arclist标签会自动去读取全局变量$GLOBALS['typeid']的值。
-
生成首页 登录 DedeCMS 后台,点击“生成” -> “一键生成” -> “更新主页”,重新生成你的首页。
使用 dede:sql 直接查询法(最灵活、最强大)
当你需要更复杂的查询条件,或者 arclist 标签无法满足你的需求时,使用 dede:sql 直接执行 SQL 语句是最佳选择。

适用场景:需要跨表查询、排序方式特殊、需要获取特定字段等复杂情况。
操作步骤:
- 在模板文件中直接调用
在你的模板文件(如
index.htm)中,直接使用dede:sql标签:{dede:sql sql="SELECT id, title, arcurl, pubdate FROM `dede_archives` WHERE typeid IN (1,3,5) AND arcrank > -1 ORDER BY pubdate DESC LIMIT 0, 10"} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span> </li> {/dede:sql}代码解释:
dede:sql:执行自定义SQL语句的标签。sql="...":里面的就是标准的 SQL 查询语句。SELECT id, title, arcurl, pubdate FROMdede_archives`从文章主表dede_archives中查询指定字段。dedearchives是 DedeCMS 存储文章基本信息的表,**你的表前缀可能不是dede`,请根据实际情况修改**。WHERE typeid IN (1,3,5):这是关键!typeid IN (1,3,5)表示只查询栏目ID为 1、3 或 5 的文章,这与方法一的效果相同。AND arcrank > -1:这是一个常用条件,表示只审核通过的文章(arcrank = -1为审核通过)。ORDER BY pubdate DESC:按发布日期降序排列,最新的在前面。LIMIT 0, 10:从第0条记录开始,取10条记录(即调用10篇文章)。[field:arcurl/]、[field:title/]:通过field标签来输出SQL查询返回的各个字段的值。
通过自定义模型/扩展变量法(最规范、最易维护)
如果你的网站结构比较复杂,或者这个“多栏目调用”功能需要在多个页面重复使用,那么通过后台设置一个扩展变量是最好的选择。
适用场景:需要全局配置、方便修改和维护的项目。
操作步骤:
-
在后台设置扩展变量
- 登录 DedeCMS 后台。
- 进入“系统” -> “系统基本参数” -> “添加新变量”。
- 变量名称:填写
multi_typeid(不能与已有变量冲突)。 - 变量类型:选择“文本”。
- 参数说明:填写“多个栏目ID列表”。
- 变量值:填写你的栏目ID,如
1,3,5。 - 点击“保存变量”。
-
在模板文件中使用 在你的模板文件中,使用
{dede:global}标签来读取这个变量,并将其传递给arclist:{dede:arclist typeid='{dede:global name='multi_typeid'/}' titlelen='30' row='10'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span> </li> {/dede:arclist}代码解释:
{dede:global name='multi_typeid'/}:这句代码会读取你在后台设置的变量值,也就是'1,3,5'。typeid='{dede:global name='multi_typeid'/}':将读取到的值动态地赋给arclist标签的typeid属性。
-
维护方便 以后如果需要修改调用的栏目,你只需要去后台的“系统基本参数”里修改“多个栏目ID列表”的值即可,无需修改任何模板文件,非常方便。
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 全局变量 | 简单直接,无需后台设置 | 修改需要编辑PHP文件,不够灵活 | 首页调用少量固定栏目,快速实现 |
dede:sql |
极其灵活,可完成任何复杂查询 | 需要了解SQL语法,字段名要写对 | 复杂查询、特殊排序、跨表操作 |
| 扩展变量 | 最规范,易于维护和修改 | 需要在后台先进行设置 | 多页面使用、需要经常更换栏目ID的项目 |
对于绝大多数用户来说,方法一 和 方法三 是最常用且推荐的,如果你只是想在首页调用几个栏目,用方法一最快,如果你希望这个配置是可维护的,用方法三最专业,如果遇到 arclist 搞不定的复杂需求,那么方法二是你的终极武器。
