{dede:arclist} 是 DedeCMS 中最核心、最强大的列表标签之一,它不仅可以调用单个栏目的文章,更可以通过灵活的参数组合,实现全站内容的调用。

核心基础:调用指定栏目
在调用全站之前,我们先要理解调用单个栏目的基本用法,这是基础。
基本语法:
{dede:arclist typeid='' ...}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
typeid: 这是最重要的参数,用于指定要调用的栏目 ID。typeid='0':调用所有顶级栏目(一级栏目)。typeid='1,2,3':调用栏目 ID 为 1、2、3 的文章。typeid='':不指定栏目,调用全站所有栏目的文章,这是实现“全站调用”的关键。
实现全站调用的几种方法
根据不同的需求,有几种方法可以实现全站调用。
调用所有栏目的最新文章(最常用)
这是最直接的全站调用方式,它会获取所有栏目(包括所有子栏目)中按发布时间排序的最新文章。

示例代码:
<h3>全站最新文章</h3>
<ul>
{dede:arclist titlelen='40' row='10'}
<li>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
</li>
{/dede:arclist}
</ul>
参数说明:
typeid='':不指定栏目ID,系统会默认获取所有栏目的内容。row='10':获取 10 条记录,len='40'`:标题长度限制为 40 个字符(一个汉字算2个字符)。[field:pubdate ...]:文章发布日期,这里使用了一个函数MyDate来格式化日期。[field:arcurl/]:文章的链接地址。[field:title/]:文章的标题。
调用顶级栏目及其所有子栏目的文章
你可能只想调用几个特定顶级栏目(及其下属的所有子栏目)下的文章,而不是全站所有栏目,这时就需要用到 typeid 和 topid 的组合。
场景: 假设你的网站结构是:

- 新闻中心 (ID=1)
- 国内新闻 (ID=3)
- 国际新闻 (ID=4)
- 产品中心 (ID=2)
- 产品A (ID=5)
- 产品B (ID=6)
- 关于我们 (ID=7)
需求: 只想调用“新闻中心”和“产品中心”下的所有文章。
示例代码:
<h3>新闻与产品中心最新文章</h3>
<ul>
{dede:arclist typeid='1,2' row='10'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="cate">[field:typename/]</span>
</li>
{/dede:arclist}
</ul>
参数说明:
typeid='1,2':指定顶级栏目 ID 为 1 和 2。typeid参数在此处的作用是: 当你指定了顶级栏目 ID 后,{dede:arclist}会自动包含这些顶级栏目下的所有子栏目,所以它会调用 ID 为 1, 2, 3, 4, 5, 6 的所有文章。[field:typename/]:调用文章所在的栏目名称,这对于区分文章来源非常有用。
调用指定栏目及其同级栏目的文章
场景: 假设栏目结构同上,当前在“国内新闻(ID=3)”页面,你想显示“新闻中心(ID=1)”下的所有文章(包括“国内新闻”和“国际新闻”)。
示例代码:
<h3>同栏目及兄弟栏目文章</h3>
<ul>
{dede:arclist typeid='~id' row='8'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
</li>
{/dede:arclist}
</ul>
参数说明:
typeid='~id':这是一个特殊用法。~id表示获取当前栏目所在的顶级栏目的 ID。- 如果当前页面是“国内新闻(ID=3)”,
~id就会自动替换为它的顶级栏目“新闻中心(ID=1)”。 - 这个标签会调用 ID 为 1 的顶级栏目及其所有子栏目(即 1, 3, 4)下的文章。
进阶用法:全站调用 + 高级筛选
全站调用时,通常还需要结合其他参数进行更精细的筛选。
按频道筛选
如果你的网站使用了“频道模型”(文章频道、图集频道、软件频道),可以使用 channelid 参数来指定只调用某个模型下的内容。
示例: 只调用模型为“文章”(channelid=1)的内容。
{dede:arclist typeid='' channelid='1' row='10'}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
按标签筛选
{dede:arclist} 支持按文章的标签进行筛选,这在实现相关文章、热门标签聚合时非常有用。
示例: 调用所有带有“DedeCMS”标签的文章。
{dede:arclist typeid='' row='10' tag='DedeCMS'}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
tag='DedeCMS':可以是一个标签,也可以是多个,用逗号隔开,如tag='DedeCMS,织梦'。
排除指定栏目
在全站调用时,你可能想排除掉某些不希望显示的栏目(关于我们”、“留言板”等)。
示例: 调用全站文章,但排除 ID 为 7 和 8 的栏目。
{dede:arclist typeid='' row='10' channelid='' typeidnot='7,8'}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
typeidnot='7,8':指定不调用的栏目 ID。
排除当前栏目
在列表页,你可能想调用全站的文章,但排除当前栏目本身,以避免重复。
示例: 在列表页调用全站文章,但排除当前栏目。
{dede:arclist typeid='' row='10' channelid='' typeidnot='~id'}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
typeidnot='~id':~id同样代表当前栏目的 ID,这里用它来排除自己。
常用字段说明
在 {dede:arclist} 中,通过 [field:xxx/] 可以调用文章的各种信息。
| 字段名 | 说明 | 示例 |
| :--- | :--- | :--- | | 文章标题 | [field:title/] |
| arcurl | 文章链接 | [field:arcurl/] |
| pubdate | 发布时间(时间戳) | [field:pubdate/] |
| description | 在后台“文档选项”中设置) | [field:description/] |
| imgsrc | 文章的第一张图片(如果有) | [field:imgsrc/] |
| typename | 文章所在栏目的名称 | [field:typename/] |
| typeurl | 文章所在栏目的链接 | [field:typeurl/] |
| click | 文章点击数 | [field:click/] |
| id | 文章的 ID | [field:id/] |
字段格式化:
-
日期格式化:
[field:pubdate function='MyDate("Y-m-d H:i:s",@me)'/]MyDate是 DedeCMS 的内置函数。"Y-m-d H:i:s"是你想要的日期格式。@me是当前字段的原始值(时间戳)。
-
标题截取:
[field:title function='cn_substr(@me, 30)'/]cn_substr是 DedeCMS 的截取字符串函数,支持中英文混合。30是截取的字符长度。
总结与最佳实践
-
明确需求: 首先想清楚,你到底要调用什么?
- 全站所有内容? ->
typeid='' - 几个大分类的内容? ->
typeid='1,2,3' - 当前分类及其兄弟分类? ->
typeid='~id'
- 全站所有内容? ->
-
合理使用参数: 结合
row(数量)、titlelen长度)、channelid(模型)、typeidnot(排除)等参数,精准控制输出内容。 -
注意性能:
{dede:arclist}是在 PHP 端执行的,如果调用数据量过大(row='1000'),并且没有对数据库做优化,会加重服务器负担,导致页面加载缓慢,对于全站调用,建议row值不要设置得过大。 -
善用字段函数:
function属性非常强大,学会使用MyDate、cn_substr等函数,可以让你在模板中完成大部分格式化工作,保持模板的简洁。
通过以上组合,你就可以灵活地使用 {dede:arclist} 实现网站中绝大多数的列表调用需求了。
