在 DedeCMS 中,内容页(article_article.htm)的分页功能是通过一个核心的底层模板标签 {dede:pagebreak/} 来实现的,这个标签会根据后台设置,自动将长文章分割成多个页面,并生成上一页、下一页、页码等链接。
核心标签:{dede:pagebreak/}
页分页功能的基石,你只需要在你希望分页符出现的位置放置这个标签即可。
工作原理:
- 在后台编辑文章时,使用编辑器中的“分页符”按钮(通常是一个“#”图标或“分页”按钮)。
- 点击分页符,就相当于在文章内容中插入了
{dede:pagebreak/}这个标签。 - 当文章被保存并生成 HTML 时,DedeCMS 会识别这个标签,将其后的内容分割到新的页面中。
{dede:pagebreak/}标签本身会被替换为分页导航栏的 HTML 代码。
示例: 假设你的文章很长,编辑时内容如下:
<p>这是文章的第一部分内容...</p>..</p> <!-- 在这里点击编辑器的“分页符”按钮 --> <p>这是文章的第二部分内容,和第一部分不在同一个页面上。</p>
保存后,模板文件 article_article.htm 中对应的位置会生成:
<p>这是文章的第一部分内容...</p>..</p>
{dede:pagebreak/}
<p>这是文章的第二部分内容,和第一部分不在同一个页面上。</p>
最终在前端显示时,{dede:pagebreak/} 会变成类似这样的分页导航:
[1] [2] 下一页 >>
分页导航的样式控制
默认情况下,{dede:pagebreak/} 生成的分页导航样式比较简单,通常我们需要通过 CSS 来美化它,使其更符合网站的设计风格。
默认 HTML 结构
{dede:pagebreak/} 生成的 HTML 结构通常如下:
<ul class="dede_pages">
<li><span class="pageinfo">共 <strong>4</strong> 页/<strong>12</strong> 条</span></li>
<li><a href="article_1.html">上一页</a></li>
<li><a href="article_1.html">1</a></li>
<li><span class="thisclass">2</span></li>
<li><a href="article_3.html">3</a></li>
<li><a href="article_4.html">4</a></li>
<li><a href="article_3.html">下一页</a></li>
<li><a href="article_4.html">末页</a></li>
</ul>
CSS 样式示例
你可以在你的 CSS 文件(如 style.css)中添加以下样式来美化分页导航:
/* 分页导航容器 */
.dede_pages {
list-style: none;
padding: 0;
margin: 20px 0;
text-align: center;
font-family: Arial, sans-serif;
}
.dede_pages li {
display: inline-block;
margin: 0 5px;
}
/* 链接样式 */
.dede_pages a {
display: block;
padding: 6px 12px;
border: 1px solid #ddd;
border-radius: 3px;
color: #333;
text-decoration: none;
transition: all 0.3s ease;
}
/* 鼠标悬停效果 */
.dede_pages a:hover {
background-color: #f8f8f8;
border-color: #aaa;
}
/* 当前页样式 */
.dede_pages .thisclass {
display: block;
padding: 6px 12px;
border: 1px solid #007bff;
border-radius: 3px;
background-color: #007bff;
color: #fff;
font-weight: bold;
cursor: default; /* 当前页不可点击 */
}
/* 禁用链接样式(如第一页时的“上一页”) */
.dede_pages a.disableurl {
color: #999;
cursor: not-allowed;
border-color: #eee;
}
高级应用与自定义
默认的 {dede:pagebreak/} 无法满足更复杂的分页需求,比如自定义“上一页/下一页”的文字、或者需要获取当前页码等信息,这时,我们可以结合 {dede:field} 标签来实现。
获取当前页码
你可以使用 {dede:field.page/} 来获取当前是第几页。
示例: 在文章标题旁显示当前页码
<h1>{dede:field.title/} - 第 {dede:field.page/} 页</h1>
自定义“上一页/下一页”链接
默认的“上一页/下一页”文字是固定的,如果你想自定义它们,可以这样写:
<ul class="dede_pages">
<!-- 上一页 -->
<li>
{dede:prepage runphp='yes'}
@me = (empty(@me) ? '<a href="javascript:;" class="disableurl">上一页</a>' : '<a href="' . @me . '">上一页</a>');
{/dede:prepage}
</li>
<!-- 页码列表 (这里简化处理,实际中可用循环) -->
<li><a href="{dede:field name='phpurl'/}/view.php?aid={dede:field.id/}&page=1">1</a></li>
{dede:page listsize='2' /}
<li><a href="{dede:field name='phpurl'/}/view.php?aid={dede:field.id/}&page={dede:field.totalpage/}">{dede:field.totalpage/}</a></li>
<!-- 下一页 -->
<li>
{dede:nextpage runphp='yes'}
@me = (empty(@me) ? '<a href="javascript:;" class="disableurl">下一页</a>' : '<a href="' . @me . '">下一页</a>');
{/dede:nextpage}
</li>
</ul>
代码解释:
{dede:prepage}:获取上一页的 URL。{dede:nextpage}:获取下一页的 URL。runphp='yes':允许在标签内使用 PHP 代码。@me:这是一个变量,代表标签的原始值(在这里就是 URL)。empty(@me):判断上一页/下一页的 URL 是否为空,如果为空(比如在第一页时没有上一页),则显示一个禁用状态的链接;否则,显示一个正常的链接。
后台设置
在后台进行一些相关设置,可以更好地控制分页功能。
- 进入后台:
系统->系统基本参数->核心设置。 - 列表每页条数:这个设置通常用于列表页,但也会影响内容页分页逻辑的计算基础。
- 分页选项:
- 在后台编辑文章时,编辑器工具栏上通常有“分页”按钮。
- 有些版本或插件可能提供更详细的分页设置,比如是否启用、默认分割方式等。
| 功能/需求 | 核心标签/方法 | 说明 |
|---|---|---|
| 基本分页 | {dede:pagebreak/} |
编辑器中使用分页符插入,或在模板文件中直接放置。 |
| 样式美化 | CSS 选择器 | 通过 .dede_pages, .thisclass, a 等类名编写 CSS 进行样式控制。 |
| 获取当前页码 | {dede:field.page/} |
在模板中调用,用于显示或判断当前是第几页。 |
| 自定义导航 | {dede:prepage} 和 {dede:nextpage} |
结合 runphp='yes' 实现对“上一页/下一页”链接的完全自定义。 |
| 页码列表 | {dede:page listsize='2' /} |
生成中间的页码列表,listsize 控制显示的页码数量。 |
对于绝大多数 DedeCMS 网站,直接使用 {dede:pagebreak/} 并配合 CSS 样式调整就足够了,只有在需要非常特殊和定制化的分页效果时,才需要用到 {dede:prepage} 和 {dede:nextpage} 等高级方法。
