arclist 标签用于从数据库中获取文章列表,并进行循环输出,通常用于首页、列表页、频道页等需要展示文章摘要的地方,它功能非常强大,参数繁多,可以满足绝大多数列表调用需求。
基本语法
arclist 标签的基本结构如下:
{dede:arclist
flag='h'
row='10' len='30'
orderby='pubdate'
}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
{dede:arclist ...}: 循环开始标签, 处是各种参数。- 循环体内的 HTML 代码,这里是你自定义的列表项样式。
{/dede:arclist}: 循环结束标签。
核心参数详解
参数写在 {dede:arclist} 和 {/dede:arclist} 之间,用空格隔开。
基础参数
| 参数 | 说明 | 示例 |
|---|---|---|
typeid |
指定栏目ID,获取特定栏目的文章,多个ID用逗号隔开,如果不指定,则获取所有栏目的文章(或根据后台设置)。 | typeid='1,3' (获取栏目ID为1和3下的文章) |
row |
循环调用条数,即显示多少篇文章。 | row='8' (显示8篇文章) |
infolen |
摘要长度,文章摘要显示多少个字符。 | infolen='100' (摘要最多显示100个字符) |
orderby |
排序方式,决定文章的排列顺序。 | orderby='pubdate' (按发布时间降序) orderby='hot' (按点击量降序) orderby='click' (同hot) orderby='id' (按文章ID降序) orderby='sortrank' (按文章排序级别降序) |
idlist |
指定文章ID列表,直接调用指定ID的文章,忽略栏目限制,多个ID用逗号隔开。 | idlist='10,22,35' (只调用ID为10, 22, 35的这3篇文章) |
过滤与排除参数
| 参数 | 说明 | 示例 |
|---|---|---|
flag |
特定属性文章,调用带有特定标识的文章,多个标识用逗号隔开。 | flag='h' (调用头条文章) flag='h,c' (调用头条和推荐文章) 常见标识: h(头条), c(推荐), p(图片), f(幻灯) |
noflag |
排除特定属性文章,与 flag 相反。 |
noflag='h' (调用除了头条以外的所有文章) |
channel |
指定模型ID,调用特定内容模型的文章。 | channel='1' (调用文章模型) |
limit |
记录起始偏移量,格式为 "起始条数,显示条数"。limit='0,10' 表示从第1条开始,共显示10条,等同于 row='10'。limit='10,10' 表示从第11条开始,显示10条。 |
limit='5,5' (从第6条开始,显示5条) |
高级与特殊参数
| 参数 | 说明 | 示例 |
|---|---|---|
subday |
调用指定天数内发布的文章。 | subday='7' (调用最近7天内发布的文章) |
keyword |
关键词搜索,调用包含指定关键词的文章。 | keyword='DedeCMS' |
att |
附件方式,'1' 表示调用有附件的文章。 |
att='1' |
ismember |
会员级别,'0' 表示调用所有会员可见的文章,'1' 表示调用仅会员可见的文章。 |
ismember='0' |
typeid 的特殊用法 |
typeid 的值是 顶级栏目ID,并且设置了 reid='yes',则会调用该顶级栏目下的所有子栏目的文章。 |
typeid='1' reid='yes' (调用顶级栏目ID为1下的所有子栏目的文章) |
orderway |
排序方向,与 orderby 配合使用。'asc' 为升序,'desc' 为降序(默认)。 |
orderby='id' orderway='asc' (按文章ID升序排列) |
常用字段(field)
在 {dede:arclist} 循环体内,使用 [field:xxx/] 来调用文章的各个字段。
| 字段名 | 说明 | 示例 |
|---|---|---|
[field:title/] |
<a href="[field:arcurl/]">[field:title/]</a> |
|
[field:arcurl/] |
文章链接 | <a href="[field:arcurl/]">查看详情</a> |
[field:pubdate/] |
文章发布时间(原始时间戳) | [field:pubdate/] (输出类似:1432345678) |
[field:description/] |
文章摘要 | [field:description/] |
[field:click/] |
文章点击量 | [field:click/] 次点击 |
[field:litpic/] |
文章缩略图 | <img src="[field:litpic/]" alt="[field:title/]"> |
[field:info/] |
(截取后,与 infolen 配合) |
[field:info/] |
[field:textlink/] |
<a> 标签形式的标题链接 |
[field:textlink/] (等同于 <a href="[field:arcurl/]">[field:title/]</a>) |
[field:image/] |
<img> 标签形式的缩略图 |
[field:image/] (等同于 <img src="[field:litpic/]" alt="[field:title/]">) |
字段高级用法:使用函数
可以在字段后加上 function 来调用PHP函数,对字段值进行处理,这是最常用的技巧。
[field:pubdate function="MyDate('Y-m-d', @me)"/]
function: 固定写法。MyDate: DedeCMS内置的日期格式化函数。'Y-m-d': 你想要的日期格式。@me: 系统变量,代表当前字段的原始值(这里是时间戳)。
其他常用函数示例:
-
(替代
titlelen):[field:title function='cn_substr(@me, 20)'/]
cn_substr是 DedeCMS 的字符截取函数,可以处理中英文混合。 -
去除HTML标签后截取摘要:
[field:description function='htmlspecialchars(cn_substr(Html2Text(@me), 100))'/]
这个例子先去除HTML标签,再截取100个字符,最后转义HTML特殊字符,确保安全显示。
综合实例
实例1:调用“公司新闻”栏目下的最新5条文章,标题30字符,摘要100字符。
假设“公司新闻”的栏目ID是 2。
<h3>公司新闻</h3>
<ul class="news-list">
{dede:arclist typeid='2' row='5' titlelen='30' infolen='100' orderby='pubdate'}
<li>
<span class="date">[field:pubdate function="MyDate('Y-m-d', @me)"]</span>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<p class="summary">[field:description/]</p>
</li>
{/dede:arclist}
</ul>
实例2:调用首页的“幻灯片”内容(通常是 flag='f' 的文章)。
幻灯片通常有特定的样式,比如带缩略图和标题。
<div class="slider">
{dede:arclist flag='f' row='5' titlelen='20'}
<div class="slide-item">
<a href="[field:arcurl/]" title="[field:title/]">
<img src="[field:litpic/]" alt="[field:title/]">
<span class="title">[field:title/]</span>
</a>
</div>
{/dede:arclist}
</div>
实例3:调用所有栏目的“推荐”文章(排除头条),显示10条。
<h3>编辑推荐</h3>
<dl>
{dede:arclist flag='c' noflag='h' row='10'}
<dt>
<a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]"></a>
</dt>
<dd>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<p>[field:info/]...</p>
</dd>
{/dede:arclist}
</dl>
注意事项
- 性能考虑:
arclist是一个非常灵活的标签,但正因为需要实时查询数据库,如果参数设置不当(例如不指定typeid而是调用全站所有文章),会对网站性能产生较大影响。尽量指定typeid,缩小查询范围。 - 模板缓存:DedeCMS 有模板缓存机制,修改了
arclist标签后,如果页面没有变化,请到后台 “生成” -> “更新主页HTML” 或清理缓存后再查看效果。 - 字段可用性:不是所有字段在所有情况下都有值,没有设置摘要的
[field:description/]将为空,没有上传缩略图的[field:litpic/]会调用默认的/images/defaultpic.gif。
希望这份详细的指南能帮助你完全掌握 dede:arclist 的使用!
