下面我将从基础用法到进阶技巧,详细地为你讲解如何实现。

(图片来源网络,侵删)
基础用法:调用指定栏目下的文章
这是最简单直接的方式,通常用于首页、栏目页或自定义页面,调用某个或某几个固定ID的栏目下的文章。
标签说明
{dede:arclist} 标签用于获取文章列表,它有很多属性来控制输出的内容。
常用属性
- typeid: 核心属性,指定要获取文章的栏目ID,可以是一个ID(如
typeid='1'),也可以是多个ID,用逗号隔开(如typeid='1,2,3')。 - row: 输出文章的数量。
row='10'表示输出10篇文章。 - titlelen: 标题长度。
titlelen='30'表示标题最多显示30个字符(一个汉字算2个字符)。 - infolen: 内容摘要长度。
infolen='100'表示摘要最多显示100个字符。 - orderby: 排序方式,常用值:
pubdate:按发布时间排序(默认)。hot或click:按点击量排序。id:按文章ID排序。
- orderway: 掇序方向。
desc(降序,默认)或asc(升序)。 - channelid: 频道ID,默认为1(文章频道),如果调用的是图集、软件等其他模型,需要修改此值。
- idlist: 文章ID列表,如果只想调用特定的几篇文章,可以用此属性,如
idlist='10,22,35'。
示例代码
假设我们要调用栏目ID为 '1' 的栏目下的 10 篇文章,按发布时间降序排列,标题长度限制为 30 个字符。
{dede:arclist typeid='1' row='10' titlelen='30' orderby='pubdate' orderway='desc'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
字段说明
[field:title/]: 文章标题。[field:arcurl/]: 文章链接。[field:pubdate/]: 文章发布时间,是一个时间戳,通常会配合function进行格式化,如示例中的MyDate('Y-m-d', @me)。[field:litpic/]: 文章缩略图。[field:description/]:[field:click/]:文章点击量。
进阶用法:循环调用多个栏目下的文章
我们需要一次性调用几个不同栏目下的文章,并合并在一起显示。

(图片来源网络,侵删)
方法:使用 typeid 属性
只需在 typeid 属性中列出所有需要调用的栏目ID,用英文逗号隔开即可。
示例代码
假设我们要同时调用栏目ID为 '1' 和 '3' 的栏目下的文章,总共显示 8 篇。
<h3>最新资讯</h3>
<ul>
{dede:arclist typeid='1,3' row='8' titlelen='40' orderby='pubdate' orderway='desc'}
<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>
高级用法:循环调用子栏目及其下的文章
这是非常常见的需求,比如在首页的某个区域,显示“产品中心”这个一级栏目下的所有子栏目,并且在每个子栏目标题后面,列出该子栏目下的 N 篇最新文章。
这需要结合 {dede:channel} 和 {dede:arclist} 标签嵌套使用。

(图片来源网络,侵删)
核心思路
- 使用
{dede:channel}循环调用指定父栏目下的所有子栏目。 - 在
{dede:channel}的循环体内,使用{dede:arclist}调用当前循环到的子栏目(typeid='[field:id/]')下的文章。
示例代码
假设“产品中心”栏目的ID是 '2',我们想显示它所有子栏目,以及每个子栏目下的3篇最新文章。
<h2>产品中心</h2>
<div class="product-list">
{dede:channel type='son' typeid='2'}
<div class="product-category">
<h3><a href="[field:typelink/]">[field:typename/]</a></h3>
<ul>
{dede:arclist typeid='[field:id/]' row='3' titlelen='20' orderby='pubdate' orderway='desc'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">
<img src="[field:litpic/]" alt="[field:title/]">
<span>[field:title/]</span>
</a>
</li>
{/dede:arclist}
</ul>
</div>
{/dede:channel}
</div>
代码解析
{dede:channel type='son' typeid='2'}:typeid='2': 指定父栏目ID,即“产品中心”。type='son': 表示调用该父栏目的所有直接子栏目。
[field:id/]: 在{dede:channel}循环中,[field:id/]代表当前子栏目的ID。[field:typelink/]: 当前子栏目的链接地址。[field:typename/]: 当前子栏目的名称。- 内层的
{dede:arclist}就是通过typeid='[field:id/]'来获取当前子栏目下的文章。
常见问题与技巧
如何调用当前栏目下的文章?
在栏目页模板(list_article.htm)或文章页模板(article_article.htm)中,可以使用全局变量 typeid。
{dede:arclist typeid='~typeid~' row='5' titlelen='30'}
...
{/dede:arclist}
~typeid~是织梦的特殊写法,它会自动解析为当前页面的栏目ID。
如何排除某个栏目?
织梦的 arclist 标签本身没有直接排除栏目的属性,一个变通的方法是:
- 获取所有需要调用的栏目的ID。
- 将不需要的栏目ID从列表中移除。
- 将处理后的ID列表赋值给
typeid属性。
要调用ID为1,2,3,4的栏目,但排除ID为3的栏目:
{dede:arclist typeid='1,2,4' row='10'}
...
{/dede:arclist}
如何自定义样式和分页?
- 自定义样式:通过给
<li>或其他HTML元素添加class或id属性,然后在CSS文件中定义样式。{dede:arclist typeid='1' row='5'} <li class="news-item"> <a href="[field:arcurl/]">[field:title/]</a> </li> {/dede:arclist} - 分页:
{dede:arclist}本身不包含分页功能,如果需要分页,应该使用{dede:list}标签,并配合{dede:pagelist}标签使用。{dede:list}通常用于栏目页模板,而{dede:arclist}更多用于首页、自定义页面等非列表页。
| 需求场景 | 核心标签 | 关键属性 |
|---|---|---|
| 调用单个栏目文章 | {dede:arclist} |
typeid='栏目ID' |
| 调用多个栏目文章 | {dede:arclist} |
typeid='ID1,ID2,ID3' |
| 循环调用子栏目及其文章 | {dede:channel} + {dede:arclist} |
typeid='父栏目ID' 和 typeid='[field:id/]' |
| 调用当前栏目文章 | {dede:arclist} |
typeid='~typeid~' |
掌握了以上几种用法,你就可以灵活地在织梦网站的各个位置实现文章的循环调用了,希望这份详细的指南能帮到你!
