第一步:确认基本条件(90%的问题出在这里)
在排查复杂原因之前,请先确认以下三个最基本的前提条件是否满足,任何一个不满足,分页都不会显示。

数据库中必须有分页数据
这是最根本的原因,如果你的内容页(如文章详情页)只有一页数据,DedeCMS 不会生成多余的页码,{dede:pagelist} 自然就什么都不显示。
- 如何检查?
- 登录你的网站后台。
- 进入“[核心] -> [内容频道管理]”。
- 点击你对应的内容模型(如“普通文章”)。
- 选择一篇需要测试的文章,点击“[更改]”。
- 在文章编辑页面,将内容(
body字段)复制很多次,或者手动添加一些文字,让内容变得非常长。 - 确保“分页符”按钮是可用的(默认是可用状态),然后在内容中间多次点击它,插入多个
<!--pagebreak-->分页标记。 - 更新这篇文章。
- 目的: 强制生成多页数据,这是测试分页标签是否生效的前提。
模板文件中必须包含 {dede:pagebreak/}
{dede:pagebreak/} 是内容分页的“触发器”,它告诉 DedeCMS 在这里将文章内容截断,并生成下一页,没有它,文章就是一整页,自然没有分页。
-
如何检查?
- 进入后台的“[模板] -> [默认模板管理]”。
- 找到并打开你正在使用的文章内容页模板,通常是
article_article.htm。 - 在模板代码中,找到
{dede:field.body/}这个标签。 - 确保
{dede:pagebreak/}标签被正确地放在了{dede:field.body/}标签的内部。 - 正确的写法通常是:
<div class="article-content"> {dede:field.body/} </div>或者更推荐的方式,将分页按钮放在内容后面:
(图片来源网络,侵删)<div class="article-content"> {dede:field.body/} </div>
{dede:pagebreak/}
-
注意:
{dede:pagebreak/}是一个单标签,结尾没有 ,它本身不会在页面上显示任何东西,它的作用是“后台触发分页”。
{dede:pagelist} 标签必须在循环中
{dede:pagelist} 标签必须被放在 {dede:arclist} 或 {dede:list} 等循环标签的内部,用来循环显示当前内容项的分页列表。
-
如何检查?
(图片来源网络,侵删)-
打开你的列表页模板(如
list_article.htm页模板(article_article.htm)。 -
找到
{dede:arclist}或{dede:list} -
确认
{dede:pagelist}标签被放在了这个循环标签的开始和结束标签之间。 -
在列表页中:
{dede:arclist titlelen='50'} <li> <a href="[field:arcurl/]">[field:title/]</a> </li> <!-- 循环内部,显示当前条目的分页 --> <div class="pagelist"> [field:pagelist/] </div> {/dede:arclist}重要提示: 在循环内部,
{dede:pagelist}应该写作[field:pagelist/],这是很多新手容易犯的错误! -
页(
article_article.htm)中,它通常直接使用,因为内容页本身就在循环一个文章:<div class="article-content"> {dede:field.body/} </div> {dede:pagebreak/}
```-
{dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/}
-
第二步:检查标签属性和样式
如果前三步都正确,但分页列表依然不显示,可能是标签的属性或CSS样式问题。
检查标签属性
{dede:pagelist} 标签有很多属性,可以控制显示哪些内容。
-
常用属性:
listsize='5':显示的页码链接数量,默认是 5。listitem='info,index,end,pre,next,pageno':指定要显示的项目。info:总页数、当前页数等信息。index:首页链接。pre:上一页链接。next:下一页链接。end:末页链接。pageno:页码链接。
- 一个完整的例子:
{dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/}
-
排查建议:
- 先尝试简化标签,去掉所有属性,看看是否能显示最基础的页码:
{dede:pagelist/} - 如果简化后能显示,说明是某些属性配置有问题,再逐一添加属性进行测试。
- 先尝试简化标签,去掉所有属性,看看是否能显示最基础的页码:
检查CSS样式
分页列表其实是生成了的,但因为CSS样式问题,导致它不可见(display:none; 或者颜色和背景色相同)。
- 如何检查?
- 在浏览器中打开你的网页。
- 在分页应该出现的位置右键 -> 检查(或“检查元素”)。
- 查看浏览器生成的HTML源码,看看是否存在类似
<ul class="pagelist">...</ul>或<span class="pageinfo">...</span>这样的结构。 - 如果存在,说明标签生效了,是CSS问题。
- 检查这个元素或其父元素的CSS样式,特别是
display,visibility,color,background-color等属性。 - 如果不存在,说明标签根本没有被解析和输出,请回到第一步继续排查。
第三步:进阶排查(检查缓存和文件权限)
如果以上所有方法都无效,可能是一些更深层次的问题。
清理缓存 DedeCMS 有很强的缓存机制,缓存文件可能导致你修改的模板或数据没有即时生效。
- 清理方法:
- 后台清理: 登录后台,在首页点击右上角的“[生成]”菜单,然后选择“[一键更新缓存]”。
- 手动清理: 通过FTP或文件管理器,删除
/data目录下的cache_*文件夹和里面的所有文件。(注意:/data目录是核心目录,操作前请备份!)
检查文件权限 虽然不常见,但如果服务器文件权限设置不当,可能导致PHP无法写入或读取某些模板缓存文件,从而影响标签解析。
- 检查方法:
- 通过FTP或主机控制面板,检查
/templets目录及其下所有文件和文件夹的权限。 - 目录权限设为
755,文件权限设为644是比较安全的设置,如果你的主机服务商有特殊要求,请遵循他们的设置。
- 通过FTP或主机控制面板,检查
第四步:终极排查方法(查看源码)
如果所有方法都失败了,可以直接查看DedeCMS的源码,看看这个标签是如何被解析的。
- 在网站根目录下找到
/include/arc.archives.class.php文件(这是处理内容页的类文件)。 - 在文件中搜索
function GetPageList函数。 - 查看这个函数内部的逻辑,特别是生成
$listdd字符串的部分,通过分析源码,你可以非常清楚地了解分页列表是如何一步步构建出来的,这有助于你定位问题所在。
总结与快速自查清单
当 {dede:pagelist} 不显示时,请按以下顺序快速检查:
- 数据? -> 文章内容是否真的被分成了多页?(后台编辑文章,插入
<!--pagebreak-->) - 触发器? -> 内容页模板
article_article.htm中,{dede:field.body/}里是否有{dede:pagebreak/}? - 位置? -> 在列表页中,是否在
{dede:arclist}循环内部使用了[field:pagelist/]? - 浏览器? -> 右键检查,看看HTML源码里有没有生成分页的DOM结构?有是CSS问题,没有是标签问题。
- 缓存? -> 后台“一键更新缓存”或手动删除
/data/cache。 - 标签属性? -> 尝试使用
{dede:pagelist/}不带任何属性进行测试。
按照这个流程,90%以上的 {dede:pagelist} 不显示问题都能得到解决。
