修改 arclist 标签通常分为几个层面:

(图片来源网络,侵删)
- 前端模板调用修改:最常用,通过修改标签属性来实现不同的调用效果。
- 底层字段修改:通过修改底层模板来改变每条信息的显示格式。
- 核心文件修改:不推荐,用于修改标签本身的默认行为或添加新功能。
前端模板调用修改(最常用)
这是绝大多数用户需要掌握的修改方式,通过修改 arclist 标签的属性来控制输出的内容、数量、排序等。
基本语法
{dede:arclist typeid='' row='' titlelen='' orderby='' channelid=''}
<a href='[field:arcurl/]'>[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
{/dede:arclist}
常用属性列表
| 属性名 | 参数说明 | 示例 |
|---|---|---|
| typeid | 指定栏目ID,调用指定栏目下的文章,多个ID用逗号隔开。 | typeid='1,3' (调用栏目ID为1和3下的文章) |
| row | 调用条数,数字。 | row='10' (调用10条文章) |
| infolen | 内容简介长度,数字,单位是字节。 | infolen='100' (简介显示100个字节) |
| orderby | 排序方式,常用值有:pubdate (发布日期,默认)、click (点击量)、id (文章ID)、arcrank (置顶级别)、hot (热度) 等。 |
orderby='click' (按点击量从高到低排序) |
| orderway | 排序顺序。desc (降序,默认) 或 asc (升序)。 |
orderway='asc' (升序排列) |
| channelid | 指定模型ID。1代表文章,2代表图集,以此类推。 |
channelid='1' (只调用文章模型) |
| limit | 记录起始-结束,格式为 起始数,记录数。 |
limit='0,5' (从第0条开始,调用5条,即前5条) |
| flag | 特定属性文章,用 分隔,如 h (头条)、c (推荐)、p (图片)、a (跳转页) 等。 |
flag='h,c' (调用头条和推荐的文章) |
| subday | 指定天数内,数字,表示调用N天内的文章。 | subday='7' (调用最近7天内发布的文章) |
| keyword | ,调用包含指定关键词的文章。 | keyword='DedeCMS' (调用标题或简介中包含“DedeCMS”的文章) |
| att | 特定附加属性,如 att='2' 表示调用文章的第二个自定义字段。 |
(较少单独使用,更多用于底层字段) |
修改示例
示例1:调用指定栏目下的“头条”文章,按点击量排序,显示10条
{dede:arclist typeid='5' flag='h' row='10' orderby='click'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="click">阅读([field:click/])</span>
</li>
{/dede:arclist}
示例2:调用首页最新文章,不限制栏目,显示20条,标题长度30
{dede:arclist row='20' titlelen='30' orderby='pubdate'}
<div class="news-item">
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p class="info">[field:pubdate function="MyDate('Y-m-d H:i',@me)"]</p>
<p class="summary">[field:info/]...</p>
</div>
{/dede:arclist}
底层字段修改
arclist 标签内的内容({dede:arclist}...{/dede:arclist})就是底层模板,通过修改这里的代码,你可以控制每条信息的显示样式。

(图片来源网络,侵删)
常用底层字段
| 字段名 | 说明 | 示例 |
|---|---|---|
| [field:title/] | [field:title/] |
|
| [field:arcurl/] | 文章链接 | <a href="[field:arcurl/]">标题</a> |
| [field:picname/] | 文章首图地址 | <img src="[field:picname/]" alt="[field:title/]"> |
| [field:info/] | 简介(截取infolen长度) |
[field:info/] |
| [field:pubdate/] | 发布时间(时间戳) | [field:pubdate function="MyDate('Y-m-d',@me)"] |
| [field:click/] | 点击量 | [field:click] |
| [field:writer/] | 作者 | [field:writer] |
| [field:source/] | 来源 | [field:source] |
| [field:textlink/] | <a> 链接标签 |
[field:textlink/] (等同于 <a href='[field:arcurl/]'>[field:title/]</a>) |
| [field:image/] | <img> 图片标签 |
[field:image/] (等同于 <img src='[field:picname/]' alt='[field:title/]' />) |
| [field:id/] | 文章ID | [field:id] |
| [field:typename/] | 所属栏目名称 | [field:typename] |
| [field:typeurl/] | 所属栏目链接 | [field:typeurl] |
底层字段修改示例
目标:实现一个带缩略图、标题、日期和简介的图文列表
{dede:arclist row='6' titlelen='40' orderby='pubdate' type='image'}
<div class="article-item">
<div class="thumb">
<a href="[field:arcurl/]">
<img src="[field:picname/]" alt="[field:title/]" />
</a>
</div>
<div class="text">
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p class="date">[field:pubdate function="MyDate('Y-m-d',@me)"]</p>
<p class="summary">[field:info/]...</p>
</div>
</div>
{/dede:arclist}
说明:
type='image':这个属性会自动过滤掉没有缩略图的文章,非常适合调用图文列表。[field:picname/]:调用文章的第一张图片作为缩略图,如果文章没有图,这个字段为空,配合type='image'使用效果更好。function="MyDate('Y-m-d',@me)":这是对时间戳进行格式化,@me代表当前字段的原始值(时间戳)。
核心文件修改(高级/不推荐)
如果你想修改 arclist 的默认行为,或者添加一个系统没有的属性,就需要修改 PHP 源文件。
强烈建议: 在修改前,务必备份原文件!并且不要直接在系统目录下修改,最好通过二次开发的方式,或者使用 include 标签引入你修改过的文件。
定位核心文件
arclist 的解析逻辑主要在以下文件中:
/include/taglib/arclist.lib.php
修改流程(以添加一个新属性为例)
假设我们想添加一个 myorder 属性,可以指定按 id 或 click 排序。
- 打开
/include/taglib/arclist.lib.php文件。 - 找到获取
$orderby值的代码段。 通常在文件开头附近,类似这样:// ... 其他代码 ... if($orderby=='') $orderby = 'default'; if($orderway=='') $orderway = 'desc'; // ... 其他代码 ... $ordersql = ''; if($orderby=='hot' || $orderby=='click') $ordersql = " ORDER BY arc.click $orderway"; else if($orderby=='pubdate') $ordersql = " ORDER BY arc.pubdate $orderway"; else if($orderby=='sortrank' || $orderby=='rank') $ordersql = " ORDER BY arc.sortrank $orderway"; else $ordersql = " ORDER BY arc.id $orderway"; // ... 其他代码 ...
- 修改或添加逻辑。
我们修改
else if部分,增加一个myorder的判断:// ... 其他代码 ... $ordersql = ''; if($orderby=='hot' || $orderby=='click') { $ordersql = " ORDER BY arc.click $orderway"; } else if($orderby=='pubdate') { $ordersql = " ORDER BY arc.pubdate $orderway"; } else if($orderby=='sortrank' || $orderby=='rank') { $ordersql = " ORDER BY arc.sortrank $orderway"; } else if($orderby=='myorder') { // 新增 myorder 属性 // myorder 的值是 'click',则按点击排序,否则默认按 id 排序 if($myorder == 'click') { $ordersql = " ORDER BY arc.click $orderway"; } else { $ordersql = " ORDER BY arc.id $orderway"; } } else { $ordersql = " ORDER BY arc.id $orderway"; } // ... 其他代码 ... - 使用新属性。
现在你就可以在模板中使用了:
{dede:arclist row='10' orderby='myorder' myorder='click'} <a href="[field:arcurl/]">[field:title/]</a> {/dede:arclist}这个调用会按点击量排序。
| 修改类型 | 修改位置 | 难度 | 风险 | 适用场景 |
|---|---|---|---|---|
| 前端调用 | 模板文件 | 低 | 无 | 99% 的日常需求,如调整列表样式、数量、排序等。 |
| 底层字段 | 模板文件 | 低 | 无 | 改变每条信息的显示内容,如添加缩略图、作者、来源等。 |
| 核心文件 | /include/taglib/arclist.lib.php |
高 | 高 | 添加系统没有的标签属性,或改变 arclist 的底层逻辑。 |
对于绝大多数用户来说,熟练掌握第一部分(前端调用)和第二部分(底层字段)就足以应对绝大多数 arclist 标签的修改需求。请谨慎进行第三部分(核心文件)的修改。
