- 只显示上一页/下一页,不显示页码列表。
- 页码列表显示为
[1] [2] [3] ...等纯文本,而不是可点击的链接。 - 页码列表显示为乱码。
- 页码列表完全不显示。
下面我将从最常见的原因到最深层的原因,为你系统地排查和解决这个问题。

第一步:检查最常见的原因(90%的问题出在这里)
绝大多数 pagelist 的问题,都是因为 标签参数写错了。{dede:pagelist} 标签非常敏感,一个参数错误就可能导致整个列表失效。
是否使用了 listitem 参数?
listitem 参数是用来控制具体显示哪些分页元素的,如果你只想显示上一页、页码和下一页,可以这样写:
{dede:pagelist listitem='pre,next,pageno' function='html2text(@me)'/}
常见错误:
listitem参数拼写错误,比如写成了listiem。listitem参数为空,listitem='',这可能导致什么都不显示。listitem参数里包含了不支持的项,index(首页)在某些旧版本中可能不支持。
是否使用了 function 参数进行格式化?
为了防止分页代码被浏览器误解析,或者为了适应某些特定样式,DedeCMS官方推荐使用 function='html2text(@me)' 来对分页列表进行转义处理。

正确的写法(强烈推荐):
{dede:pagelist listitem='pre,next,pageno' function='html2text(@me)'/}
常见错误:
- 忘记了
function参数,导致某些特殊字符(如 )没有被正确处理,显示为乱码。 function参数拼写错误。
第二步:检查模板文件和标签位置
标签是否放在了 arc.listview.class.php 文件指定的位置?
DedeCMS 的列表页分页,是由系统核心文件 include/arc.listview.class.php 生成的,这个文件会寻找一个特定的模板标签 {dede:pagelist} 来替换分页代码。
请确保你的 {dede:pagelist} 标签位于列表循环 {dede:list} 的外部,并且通常放在列表的下方。

正确的模板结构示例:
<ul class="list">
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
</ul>
<!-- 这是分页列表,必须在 {dede:list} 标签之外 -->
<div class="pagelist">
{dede:pagelist listitem='pre,next,pageno' function='html2text(@me)'/}
</div>
常见错误:
- 将
{dede:pagelist}放在了{dede:list}的循环内部,这会导致每个列表项后面都跟一个分页,是错误的。 - 模板文件不是列表页模板(通常是
list_*.htm),而是其他模板文件。
检查模板文件中是否有其他代码干扰?
模板文件中的其他 PHP 代码或 JS 代码可能会意外地清空或修改 $listpage 这个变量(DedeCMS 内部存储分页代码的变量)。
检查一下你的模板文件,特别是 {dede:pagelist} 标签前后,是否有类似 <?php ... ?> 的代码块,这些代码可能会无意中覆盖分页内容。
第三步:检查系统和数据环境
如果以上两步都确认无误,那么问题可能出在系统或数据层面。
数据库表 #@__arcpagelist 是否存在且数据正确?
这个表用来存储文章的分页信息,如果列表页分页出错,可以尝试修复这个表。
- 登录你的网站后台。
- 进入 系统 -> 数据库备份/还原 -> 数据表修复。
- 在左侧列表中找到
#@__arcpagelist(或你前缀对应的表名),勾选它,然后点击“修复”按钮。
列表缓存是否过期或损坏?
DedeCMS 为了提高速度,会生成列表缓存,如果缓存文件损坏,也可能导致分页显示异常。
- 登录你的网站后台。
- 进入 系统 -> 站点维护 -> 一键更新网站。
- 在更新选项中,务必勾选“更新所有栏目HTML” 和 “生成HTML”,然后执行更新,这个过程会重新生成列表页和分页缓存。
检查PHP环境函数 mb_strlen 是否被禁用
pagelist 标签在处理时可能会用到 mb_strlen 这个多字节字符串函数,如果你的PHP环境禁用了它,可能会导致分页生成失败。
- 可以创建一个
phpinfo.php文件,内容为<?php phpinfo(); ?>,上传到网站根目录访问,搜索mbstring,看看是否已安装并启用。
第四步:终极解决方案(修改核心文件)
如果以上所有方法都无效,那很可能是你修改过 arc.listview.class.php 文件,或者这个文件本身存在Bug,这是一个比较“硬核”的解决方案,操作前请务必备份原文件!
-
找到文件:
include/arc.listview.class.php -
定位关键代码: 打开这个文件,找到
GetPageListST函数(大约在580行左右,不同版本行号可能不同)。 -
检查并修改: 在这个函数中,找到生成
$maininfo的代码块,确保代码逻辑正确,$listpage变量被正确赋值,代码可能因为某些判断导致$listpage没有被生成。找到类似这样的代码块:
// ... 前面的代码 ... if($totalpage > 1) { $maininfo = "<span class='pageinfo'>共 <strong>{$totalpage}</strong> 页</span>"; // ... 生成上一页、下一页、页码的代码 ... $listpage = $prepage.$indexpage.$listdd.$nextpage.$endpage; } else { $listpage = ""; } // ... 后面的代码 ...确保在
$totalpage > 1的条件下,$listpage变量被正确赋值,如果这里逻辑混乱,就会导致分页不显示。
总结与排查清单
遇到 dede pagelist 不对的问题,请按以下顺序逐一排查:
- 【首要检查】标签参数: 确认
{dede:pagelist listitem='pre,next,pageno' function='html2text(@me)'/}是否写对。 - 【位置检查】标签位置: 确认标签是否在
{dede:list}循环的外部。 - 【后台操作】修复数据表: 后台 -> 系统菜单 -> 数据表修复,修复
#@__arcpagelist。 - 【后台操作】更新缓存: 后台 -> 系统菜单 -> 一键更新网站,更新所有栏目HTML。
- 【文件检查】核心文件: 检查
include/arc.listview.class.php文件是否被修改过或损坏。 - 【终极手段】修改核心: 备份后,尝试修改
arc.listview.class.php中的GetPageListST函数逻辑。
按照这个流程,绝大多数 pagelist 问题都能得到解决,如果问题依旧,请提供你的 完整标签代码 和 模板中 {dede:pagelist} 周围的代码,以便进一步分析。
