核心原理
DedeCMS 的文章分页功能主要依赖于两个核心部分:

- 文章编辑器中的分页符:你在后台编辑文章时,通过点击编辑器上的“分页符”按钮(通常是一个带有“下一页”或“分页”图标的按钮)来手动或自动将文章内容分割成多个页面。
- 模板文件中的分页标签:在前台模板文件(通常是
article_article.htm)中,使用一个特殊的标签{dede:pagebreak/}来生成上一页、下一页以及页码列表的链接。
工作流程:
- 你在后台发布文章,并在需要分页的地方插入分页符。
- DedeCMS 在保存文章时,会将分页符前后的内容分别存储到数据库的
dede_addonarticle表(或其他附加表)的body字段中,并用特定的标记(如<!--pagebreak-->)进行分隔。 - 当用户访问文章时,系统会根据 URL 中的
pageno参数(?pageno=2)来决定显示第几页的内容。 - 模板文件中的
{dede:pagebreak/}标签会读取文章的分页信息,并生成相应的导航链接。
实现步骤
步骤 1:在后台编辑文章并插入分页符
-
登录你的 DedeCMS 后台。
-
进入“内容管理” -> “普通文章” -> “增加普通文章” 或编辑一篇已有文章,编辑器(如ckeditor或fck)中,将光标定位到你希望分页的位置。
-
点击编辑器工具栏上的“分页符”按钮。
(图片来源网络,侵删) -
插入后,编辑器中会出现类似
<!--pagebreak-->的标记,这就是分页的标志。 -
继续编辑下一页的内容,你可以根据需要插入多个分页符。
-
发布或更新文章。
注意:确保你的编辑器支持并正确加载了分页功能,如果找不到按钮,可能是编辑器模板配置问题。
步骤 2:在前台模板中调用分页标签
这是最关键的一步,你需要找到你网站文章详情页的模板文件,通常是 /templets/default/article_article.htm。
- 打开
article_article.htm文件。 - 显示的区域,也就是
{dede:field.body/}标签的后面,添加分页标签。
模板代码示例:
{dede:field name='body'/}
<!-- 文章内容分页标签 -->
<div class="dede_pages">
<ul class="pagelist">
{dede:pagebreak/}
</ul>
</div>
代码解释:
{dede:field.body/}:这个标签用于输出当前页面的文章内容。{dede:pagebreak/}:这是核心的分页标签,它会自动生成上一页、下一页、首页、末页以及数字页码的链接。<div class="dede_pages">...</div>和<ul class="pagelist">...</ul>:这是默认的样式容器,你可以根据自己的网站风格修改这里的class名称,然后在 CSS 文件中定义样式,以美化分页导航栏。
步骤 3:设置后台参数(可选但推荐)
在后台“系统” -> “系统基本参数” -> “核心设置”中,你可以找到一些与分页相关的设置,
- 列表每页默认显示记录数:这个主要影响栏目列表页,对文章内容页分页影响不大。
- 自动摘要长度:如果开启了“使用远程图片本地化”等选项,可能会影响内容处理,但通常不影响分页本身。
这些设置通常保持默认即可,除非你有特殊需求。
常见问题与解决方案
问题 1:为什么插入分页符后,前台只显示第一页,没有出现分页导航?
原因分析:
最常见的原因是 模板文件中没有 {dede:pagebreak/}。
解决方案:
请务必检查你的 article_article.htm 模板文件,确保在 {dede:field.body/} 标签后面正确添加了 {dede:pagebreak/}。
问题 2:分页导航栏样式很丑,想自定义样式怎么办?
解决方案: 你可以通过修改 HTML 结构和 CSS 样式来实现。
-
修改模板 HTML 结构: 你可以给
{dede:pagebreak/}标签包裹上你自己的div和ul结构,并赋予自定义的class。{dede:field.name='body'/} <!-- 自定义分页HTML结构 --> <div class="my-custom-pagination"> {dede:pagebreak/} </div> -
在 CSS 文件中添加样式: 在你的主题 CSS 文件(如
/templets/default/style/dedecms.css)中添加以下样式:/* 自定义分页容器样式 */ .my-custom-pagination { text-align: center; /* 居中显示 */ margin: 20px 0; font-size: 14px; } /* 自定义分页列表样式 */ .my-custom-pagination .pagelist { display: inline-block; /* 让列表变成行内块,方便控制 */ list-style: none; /* 去掉默认列表符号 */ padding: 0; margin: 0; } /* 自定义分页项(页码)样式 */ .my-custom-pagination .pagelist li { float: left; /* 让页码横向排列 */ margin: 0 5px; } /* 自定义分页链接样式 */ .my-custom-pagination .pagelist li a { display: block; padding: 5px 10px; border: 1px solid #ddd; color: #333; text-decoration: none; } /* 自定义当前页样式 */ .my-custom-pagination .pagelist li a:hover, .my-custom-pagination .pagelist li.thisclass a { background-color: #007bff; color: #fff; border-color: #007bff; }
问题 3:如何实现“内容摘要+分页”功能,让用户在点击“下一页”前能看到下一页的部分内容?
解决方案: 这需要修改模板和调用标签。
-
修改模板: 在
{dede:pagebreak/}标签中,你可以使用一些参数来控制摘要的显示。{dede:field.body/} <div class="dede_pages"> <ul class="pagelist"> {dede:pagebreak runphp='yes' totalinfo='共[total]页' pre='上一页' next='下一页' listitem='index pre pageno next end' /} </ul> </div>runphp='yes':允许在标签内使用PHP。totalinfo:显示总页数信息。listitem:定义要显示的分页元素,index是首页,pre是上一页,pageno是页码,next是下一页,end是末页。
-
实现摘要(需要修改文件): 真正的“内容摘要”功能需要对系统文件进行修改,这相对复杂一些,一个简单的方法是,在文章编辑时,手动在每一页的开头或结尾添加摘要内容,或者,你可以使用 DedeCMS 的“内容摘要”功能,但这通常用于列表页。
对于高级用户,可以通过修改
include/arc.archives.class.php文件来实现自动摘要,但这不在本文的讨论范围内,且有一定风险。
问题 4:移动端分页导航显示不正常怎么办?
解决方案:
移动端的问题通常是 CSS 样式导致的,分页导航的 li 标签默认是 float: left,这在移动端的响应式布局中可能会出现问题。
解决方案:
-
在你的移动端 CSS 文件(或媒体查询中)中,重写分页列表的样式,使用
flexbox布局。/* 在移动端样式表中 */ @media (max-width: 768px) { .dede_pages .pagelist { display: flex; justify-content: center; /* 水平居中 */ flex-wrap: wrap; /* 允许换行 */ list-style: none; padding: 0; } .dede_pages .pagelist li { margin: 2px; /* 减小间距 */ } /* 可以隐藏一些不必要的链接,如首页、末页,只保留上一页、页码、下一页 */ .dede_pages .pagelist li.index, .dede_pages .pagelist li.end { display: none; } }
实现 DedeCMS 文章内容分页,记住三个关键点:
- 后台:用编辑器的“分页符。
- 前台:在模板的
{dede:field.body/}后面加上{dede:pagebreak/}- 美化:通过修改 HTML 容器和 CSS 样式来自定义分页导航的外观。
如果遇到问题,首先检查模板标签是否正确添加,其次再考虑样式和系统配置问题,希望这份详细的指南能帮助你顺利完成文章分页功能!
