使用 channelartlist 标签(最推荐,最灵活)
这是最标准、最织梦官方的嵌套循环方法,它的核心思想是先用 channelartlist 循环出你想要显示列表的栏目,然后在每个栏目内部再使用 {dede:list} 来调用该栏目的文章。

适用场景:需要在页面上并列显示多个不同栏目的列表,行业新闻”、“产品中心”、“技术文章”等。
示例代码:
{dede:channelartlist typeid='1,2,3'}
<h2>{dede:field name='typename'/}</h2>
<ul>
{dede:list pagesize='8'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
</ul>
{/dede:channelartlist}
代码详解:
-
{dede:channelartlist typeid='1,2,3'}:
(图片来源网络,侵删)typeid='1,2,3':这是关键参数,你需要在这里填写你想要调用列表的栏目ID,多个ID用英文逗号隔开,你可以去 DedeCMS 后台的【栏目管理】中找到对应栏目的ID。- 这个标签会循环遍历 ID 为 1, 2, 3 的这三个栏目。
-
{dede:field name='typename'/}:- 在
channelartlist循环内部,这个标签用于获取当前循环栏目的名称(行业新闻”)。
- 在
-
{dede:list pagesize='8'}:- 这个标签被嵌套在
channelartlist内部,它会自动继承父级栏目的上下文,因此这里调用的就是当前栏目(即channelartlist正在循环的那个栏目)的文章列表。 pagesize='8':表示每个栏目列表调用 8 篇文章。
- 这个标签被嵌套在
使用 arclist 标签(最常用,最简单)
arclist 是一个功能极其强大的标签,可以用来调用任意指定栏目的文章列表,而无需嵌套循环,对于只需要调用一个其他栏目列表的场景,arclist 是最简单直接的选择。
适用场景:只需要在页面的某个位置(如侧边栏、底部)调用一个指定栏目的文章列表。

示例代码:
<h2>公司新闻</h2>
<ul>
{dede:arclist typeid='5' titlelen='30' orderby='pubdate' orderway='desc' pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{dede:arclist}
</ul>
代码详解:
typeid='5':这是核心参数,指定要调用哪个栏目ID下的文章,len='30'`:标题长度,截取 30 个字符。orderby='pubdate':按发布时间排序。orderway='desc':降序排列(最新的在前)。pagesize='10':调用 10 篇文章。
arclist 的参数非常多,你可以查阅官方文档或使用 DedeCMS 的标签向导来设置你需要的参数。
修改 list 标签的底层 SQL(高级用法)
如果你对织梦的底层机制比较熟悉,并且希望在不改变模板结构的情况下,直接修改 list 标签的行为,可以修改其底层查询的 SQL 语句。
适用场景:比较特殊的需求,例如在列表页本身,但希望显示另一个关联栏目的内容,此方法有一定风险,请谨慎操作。
操作步骤:
- 打开 DedeCMS 的核心文件:
include/arc.listview.class.php。 - 在这个文件中搜索
GetSqlList函数。 - 找到生成 SQL 查询语句的地方,通常在函数的末尾,类似
$this->dsql->SetQuery("SELECT ...");之前。 - 修改
WHERE条件,将固定的typeid = '当前栏目ID'修改为你想要的栏目ID。
示例修改:
假设你想在默认的列表页(ID 为 10 的栏目页)里,显示 ID 为 20 的栏目的内容。
原始 SQL 大致是:
SELECT ... WHERE arc.typeid IN (10) AND ...
你需要将其修改为:
SELECT ... WHERE arc.typeid IN (20) AND ...
⚠️ 重要警告: 直接修改核心文件不是一个好习惯,因为当你升级 DedeCMS 时,这些修改会被覆盖,如果必须使用此方法,请做好备份,并可以考虑将修改逻辑封装到自定义函数中。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
channelartlist |
最规范、最灵活,官方支持,可循环多个栏目。 | 代码结构稍复杂,需要嵌套。 | 需要在同一页面上展示多个不同栏目的并列列表。 |
arclist |
最简单、最直接,功能强大,参数丰富。 | 不能像 channelartlist 那样自动循环栏目名称。 |
只需调用一个特定栏目的列表,如侧边栏、推荐区等。 |
| 修改 SQL | 功能最强大,可以改变底层逻辑。 | 风险高,修改核心文件,升级会丢失。 | 特殊的、非标准的业务需求。 |
给你的建议:
- 99% 的情况下,使用
arclist或channelartlist就足够了。 - 如果你要调用一个其他栏目的列表,直接用
arclist,最简单。 - 如果你要调用多个其他栏目的列表,并且希望每个列表都带上自己的标题,就用
channelartlist。
希望这些方法能帮助你解决问题!
