这个标签主要用于首页或频道封面页,用于获取一个或多个栏目的列表,并支持在这些栏目的列表中再调用其子栏目的文章。

channelartlist 是什么?
channelartlist 是一个“栏目+文章”的组合列表标签,它和 channel(仅获取栏目)以及 arclist(仅获取文章)是并列的,但功能更强大。
它的典型应用场景是: 网站首页的“栏目推荐”区域,首页有“新闻中心”、“产品中心”、“关于我们”等几个主要栏目,你希望在“新闻中心”下面显示几条最新的新闻,在“产品中心”下面显示几款最新产品。
channelartlist 会先遍历你指定的父栏目,然后在每一个父栏目循环内部,再通过 type 属性来获取该栏目下的文章列表。
基本语法
{channelartlist typeid='' row=''}
<h2><a href="[field:typelink/]">[field:typename/]</a></h2>
<ul>
{dede:arclist titlelen='40' row='5'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
{/channelartlist}
常用属性
channelartlist 标签本身有一些属性,用来控制它获取哪些栏目以及如何获取。

| 属性名 | 含义 | 示例 | 说明 |
|---|---|---|---|
typeid |
指定栏目ID | typeid='1,3,5' |
最核心的属性,用于指定要获取的栏目列表,可以是单个ID,也可以是多个ID用逗号隔开,如果为空,则获取顶级栏目。 |
row |
获取栏目数量 | row='4' |
表示只获取 typeid 中指定的前4个栏目。typeid 为空,则表示获取前4个顶级栏目。 |
cacheid |
缓存ID | cacheid='home' |
用于开启缓存,提高首页加载速度,建议首页使用。 |
内置字段(循环变量)
channelartlist 标签的循环体内,可以使用以下字段来获取当前栏目的信息。
| 字段名 | 含义 | 示例 |
|---|---|---|
[field:typename/] |
栏目名称 | <h2>[field:typename/]</h2> |
[field:typelink/] |
栏目链接 | <a href="[field:typelink/]">更多...</a> |
[field:id/] |
栏目ID | 用于判断或JS调用 |
实战示例:首页“栏目推荐”区
假设我们的网站首页布局如下,有几个主要栏目,每个栏目下都要显示文章列表。
目标效果:
- 公司新闻 (栏目ID=1),显示5条新闻。
- 产品中心 (栏目ID=3),显示4条产品。
- 行业资讯 (栏目ID=5),显示6条资讯。
实现步骤:

在后台确定栏目ID 登录织梦后台,在“频道模型” -> “栏目管理”中找到“公司新闻”、“产品中心”、“行业资讯”这三个栏目的ID,假设它们分别是 1, 3, 5。
在首页模板文件 (index.htm) 中添加代码
打开你的首页模板文件,在合适的位置(<div class="main-content"> 内)添加如下代码:
<!-- 使用 channelartlist 调用三个指定栏目的文章列表 -->
{channelartlist typeid='1,3,5' row='3'}
<div class="channel-box">
<!-- 循环开始,每循环一次,代表一个栏目 -->
<!-- 栏目标题和链接 -->
<div class="channel-title">
<h2><a href="[field:typelink/]">[field:typename/]</a></h2>
<a href="[field:typelink/]" class="more">更多 ></a>
</div>
<!-- 文章列表 -->
<div class="article-list">
<ul>
<!-- 在 channelartlist 内部,使用 arclist 来调用文章 -->
{dede:arclist titlelen='30' row='5' orderby='pubdate' typeid=''}
<!-- 注意:这里的 typeid='' 可以留空,默认就是获取当前 channelartlist 循环到的栏目的文章 -->
<li>
<span class="date">[field:pubdate function="MyDate('m-d',@me)"/]</span>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
</li>
{/dede:arclist}
</ul>
</div>
<!-- 循环结束 -->
</div>
{/channelartlist}
代码解析:
-
{channelartlist typeid='1,3,5' row='3'}:typeid='1,3,5':告诉织梦,我们只获取ID为1、3、5的这三个栏目。row='3':虽然typeid里只有3个,但这里写上row='3'可以确保即使后台有新增同级别的栏目,也不会被错误调用,代码更严谨。
-
[field:typename/]和[field:typelink/]:- 在
channelartlist的每一次循环中,这两个字段会分别代表当前栏目的名称和链接,第一次循环时是“公司新闻”和其链接,第二次循环时就是“产品中心”和其链接。
- 在
-
{dede:arclist ...}:- 这是嵌套在
channelartlist内部的文章列表标签。 - 关键点:这里的
arclist不需要再指定typeid,因为channelartlist已经将“当前栏目”的上下文传递给了它。arclist会自动获取其父级channelartlist循环到的那个栏目的文章。 titlelen='30'长度限制为30个字符。row='5':显示5条文章。orderby='pubdate':按发布时间降序排列(最新的在前)。
- 这是嵌套在
注意事项与常见问题
-
嵌套关系:
channelartlist必须和arclist(或listartlist)一起使用,单独使用channelartlist是没有意义的,因为它本身不直接输出文章。 -
typeid的作用域:- 在
channelartlist上,typeid是获取父栏目。 - 在内部的
arclist上,typeid是获取指定栏目的文章,如果留空,则获取当前父栏目下的文章,如果填写,则获取指定栏目的文章,这会覆盖父栏目的上下文。
- 在
-
缓存问题:首页模板建议开启缓存,如果修改了模板但首页没有更新,可以进入“后台” -> “系统” -> “系统基本参数” -> “性能选项”,清空一下所有缓存,或者勾选“启用gzip压缩”并保存,系统会自动更新首页。
-
与
channel+arclist组合的区别:channelartlist是一个标签完成“栏目循环”和“文章调用”,代码结构更清晰,推荐使用。channel+arclist组合需要手动写循环,代码量稍多,但逻辑上更容易理解。- 示例(不推荐的方式):
{dede:channel type='top' row='3'} {dede:arclist row='5' typeid='[field:id/]'} ... {/dede:arclist} {/dede:channel}
-
栏目排序:
channelartlist获取的栏目顺序是后台“栏目管理”中的排序,如果需要自定义,可以在后台调整栏目的“排序”值。
希望这份详细的解析能帮助你完全掌握 channelartlist 的使用!
