arclist 是 DedeCMS 中最核心、最常用的列表标签,用于获取文章列表,它本身不直接生成“上一页/下一页”这样的分页导航,而是需要结合一个专门的分页标签 {dede:pagelist} 来实现。

(图片来源网络,侵删)
下面我将从 基本原理、完整代码示例、常用参数详解 以及 常见问题 四个方面来为你详细说明。
基本原理
arclist 分页的原理可以概括为以下三步:
- 使用
arclist获取数据:在模板中,你需要用arclist标签来调用你想要的列表内容,这个标签必须放在一个列表循环 ({dede:list}或{dede:arclist}内部) 中。 - 开启
arclist的分页功能:通过给arclist标签添加一个关键参数pagesize(每页显示条数),系统就知道你需要分页了,DedeCMS 会自动在底层处理分页逻辑。 - 使用
pagelist标签显示分页导航:在arclist列表之后,使用{dede:pagelist}标签来生成具体的分页链接,如“首页”、“上一页”、“1 2 3 4”、“下一页”、“末页”等。
重要提示:arclist 分页功能通常在 列表页模板 (list_article.htm) 中使用,而不是在首页 (index.htm)。
完整代码示例
这是一个在列表页模板 (list_article.htm) 中实现 arclist 分页的完整代码结构。

(图片来源网络,侵删)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
<meta name="description" content="{dede:field.description function='html2text(@me)'/}">
<meta name="keywords" content="{dede:field.keywords/}">
</head>
<body>
<h1>{dede:field.title/}</h1>
<p>当前位置:{dede:field.position/}</p>
<!-- 1. arclist 列表部分 -->
<div class="article-list">
{dede:arclist
typeid='1'
titlelen='30'
row='10'
pagesize='10'
}
<div class="item">
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</div>
{/dede:arclist}
</div>
<!-- 2. pagelist 分页导航部分 -->
<div class="page-nav">
<ul>
{dede:pagelist listsize='4' listitem='info,index,pre,next,pageno,end'}
<!-- 这里的 listitem 参数控制显示哪些分页元素 -->
{/dede:pagelist}
</ul>
</div>
</body>
</html>
代码解释:
{dede:arclist ...}: 这是调用文章列表的主标签。typeid='1': 指定栏目ID,只显示此栏目下的文章,如果要在当前栏目及其子栏目下显示,可以用typeid='top'或留空(但留空可能会影响性能)。row='10': 这个参数在这里会被pagesize覆盖,所以可以省略或保持一致。pagesize='10': 这是实现分页的核心参数,它告诉系统每页显示 10 条记录。
{dede:pagelist ...}: 这是生成分页导航的标签。- 它必须紧跟在
{dede:arclist}标签的后面。 listsize='4': 设置页码显示的个数,如果当前在第 5 页,listsize='4'可能会显示3,4,5,6或4,5,6,7这样的页码链接。listitem='...': 控制分页导航显示哪些元素,非常关键,我们会在下一节详细说明。
- 它必须紧跟在
arclist 和 pagelist 常用参数详解
arclist 标签关键参数
| 参数 | 说明 | 示例 |
|---|---|---|
typeid |
栏目ID,多个用逗号隔开。 | typeid='1,3' |
pagesize |
分页核心:设置每页显示的文章数量。 | pagesize='8' |
row |
显示文章的总数(在分页时,此参数会被 pagesize 覆盖)。 |
row='20' |
infolen |
内容简介长度。 | infolen='100' |
orderway |
排序方式。desc 为降序(默认),asc 为升序。 |
orderway='asc' |
channelid |
指定模型ID,默认为文章(1)。 | channelid='1' |
pagelist 标签关键参数
| 参数 | 说明 | 示例 |
|---|---|---|
listitem |
控制显示哪些分页项,多个用逗号隔开,常用值: - index: 首页- pre: 上一页- next: 下一页- last: 末页- pageno: 页码- info: 分页信息(如“共5页”) |
listitem='index,pre,next,pageno' |
listsize |
页码列表的显示大小,即显示多少个页码链接。 | listsize='5' |
option |
设置样式。option='style=你的样式名',然后在CSS中定义 .你的样式名 a 等。 |
option='style=my-page' |
常见问题与技巧
问题:为什么我的分页不显示?
- 原因1:未使用
pagesize参数。- 解决:检查你的
{dede:arclist}标签,确保添加了pagesize='X'参数。
- 解决:检查你的
- 原因2:
pagelist标签位置错误或遗漏。- 解决:确保
{dede:pagelist}标签紧跟在{dede:arclist}标签的闭合标签{/dede:arclist}之后。
- 解决:确保
- 原因3:列表内容为空。
- 解决:检查你指定的
typeid是否正确,以及该栏目下是否有文章。
- 解决:检查你指定的
- 原因4:使用了错误的列表标签。
- 解决:确认你使用的是
{dede:arclist},而不是{dede:list}。{dede:list}是用于“自定义列表”的分页,其分页方式不同。
- 解决:确认你使用的是
技巧:如何自定义分页导航的样式?
pagelist 生成的 HTML 结构是固定的,我们可以通过 CSS 来美化它。
pagelist 默认生成的 HTML 结构大致如下:
<div class="dede_pages">
<ul>
<span class="pageinfo">共 <strong>4</strong> 页</span>
<li><a href="...">首页</a></li>
<li><a href="...">上一页</a></li>
<li><a href="...">1</a></li>
<li class="thisclass"><a href="...">2</a></li>
<li><a href="...">3</a></li>
<li><a href="...">下一页</a></li>
<li><a href="...">末页</a></li>
</ul>
</div>
你可以通过以下 CSS 来美化它:

(图片来源网络,侵删)
/* 分页容器样式 */
.dede_pages {
text-align: center;
margin: 20px 0;
}
.dede_pages ul {
display: inline-block; /* 让ul横向排列 */
list-style: none;
padding: 0;
margin: 0;
}
.dede_pages li {
float: left; /* 横向排列 */
margin: 0 5px;
}
.dede_pages a, .dede_pages span {
display: block;
padding: 5px 10px;
border: 1px solid #ddd;
border-radius: 3px;
text-decoration: none;
color: #333;
}
.dede_pages a:hover {
background-color: #f0f0f0;
}
/* 当前页的样式 */
.dede_pages .thisclass a {
background-color: #007bff;
color: #fff;
border-color: #007bff;
}
/* 禁用链接的样式(如首页在第一页时) */
.dede_pages a.disabled {
color: #999;
cursor: not-allowed;
border-color: #eee;
}
技巧:如何获取“总页数”和“当前页码”?
有时你可能想在页面上显示“当前第 X 页,共 Y 页”这样的信息。pagelist 的 info 项可以显示“共 X 页”,但“当前页”需要通过其他方式获取。
可以使用 {dede:field pagelist/} 结合 PHP 代码来实现,但更简单的方法是利用 pagelist 自带的变量。
在 {dede:pagelist} 标签内部,可以使用以下变量:
[field:nownum/]: 当前页码[field:totalnum/]: 总记录数[field:totalpage/]: 总页数
示例:
<div class="page-info">
当前第 <strong>[field:nownum/]</strong> 页,
共 <strong>[field:totalpage/]</strong> 页,
共有 <strong>[field:totalnum/]</strong> 条记录
</div>
<div class="page-nav">
{dede:pagelist listitem='index,pre,next,end,pageno' listsize='4'/}
</div>
这样你就可以非常灵活地控制分页显示了。
希望这份详细的指南能帮助你完全掌握 DedeCMS arclist 的分页功能!
