下面我将为你详细解释分页标签的调用方法,并提供不同场景下的完整示例。

(图片来源网络,侵删)
核心标签:{pages}
在 Destoon 的模板系统中,分页功能主要通过一个简单的标签 {pages} 来实现。
基本语法:
{pages}
这个标签会根据后台的分页设置和当前的数据总数,自动生成上一页、下一页、页码、首页、尾页等完整的分页 HTML 代码。
使用场景和完整示例
分页通常用在循环列表的末尾,下面我们以最常见的“产品列表页”为例。

(图片来源网络,侵删)
示例1:产品列表页 (template/product/list.htm)
假设我们要在产品列表页显示产品,并在产品列表下方显示分页。
模板文件路径
通常位于 你的域名/template/product/list.htm
模板代码示例
<!-- 产品列表开始 -->
<div class="product-list">
{loop $tags $i $t}
<div class="product-item">
<a href="{$t[linkurl]}" title="{$t[title]}">
<img src="{if $t[thumb]}{$t[thumb]}{else}static/images/nopic.gif{/if}" alt="{$t[title]}">
<h3>{$t[title]}</h3>
</a>
<p class="price">¥{$t[price]}</p>
</div>
{/loop}
</div>
<!-- 分页标签开始 -->
<div class="page">
{pages}
</div>
<!-- 分页标签结束 -->
代码解释:

(图片来源网络,侵删)
{loop $tags $i $t}: 这是一个循环标签,用于遍历从后台传递过来的产品数据数组$tags。$i是索引,$t是当前循环到的产品数据。{$t[linkurl]}: 当前产品的详情页链接。{$t[title]}: 当前产品的标题。{$t[thumb]}: 当前产品的缩略图。{$t[price]}: 当前产品的价格。{pages}: 这就是核心的分页标签,它会自动生成类似这样的 HTML:<a href="list.php?page=1">首页</a> <a href="list.php?page=2">上一页</a> <span class="current">3</span> <a href="list.php?page=4">4</a> <a href="list.php?page=5">5</a> <a href="list.php?page=4">下一页</a> <a href="list.php?page=10">尾页</a> <span class="pageinfo">共 10 页</span>
高级用法和参数控制
默认的分页样式可能不符合我们的设计需求,Destoon 允许通过给 {pages} 标签添加参数来自定义分页的样式和输出。
语法:
{pages 参数1=值1 参数2=值2 ...}
常用参数如下:
| 参数名 | 说明 | 示例 |
|---|---|---|
total |
手动设置总记录数,通常不需要,系统会自动计算。 | {pages total=1000} |
per |
每页显示条数,通常与后台设置一致,不建议在此修改。 | {pages per=20} |
pagesize |
显示的页码按钮数量,默认是 10。 | {pages pagesize=7} |
catid |
指定分类 ID,用于在分类列表页调用分页时保持分类筛选。 | {pages catid=$catid} |
template |
指定分页模板文件(较少用,默认足够)。 | {pages template='page.htm'} |
ajax |
是否启用 AJAX 分页(无刷新)。 | {pages ajax=1} |
style |
最重要的参数,用于自定义分页 HTML 的 CSS 类名。 | {pages style='page'} |
示例2:使用 style 参数自定义分页样式
假设我们希望分页的每个链接都有一个共同的 page-link 类,当前页有一个 active 类。
修改模板标签
在 list.htm 中,将 {pages} 修改为:
<div class="pagination">
{pages style='pagination'}
</div>
对应的 CSS 样式
在你的 CSS 文件(如 static/css/style.css)中添加以下样式:
/* 分页容器样式 */
.pagination {
text-align: center;
margin: 20px 0;
font-size: 14px;
}
/* 分页链接的通用样式 */
.pagination a.page-link {
display: inline-block;
padding: 5px 12px;
margin: 0 3px;
border: 1px solid #ddd;
border-radius: 3px;
color: #333;
text-decoration: none;
}
/* 鼠标悬停效果 */
.pagination a.page-link:hover {
background-color: #f5f5f5;
border-color: #ccc;
}
/* 当前页的样式,Destoon 会自动给当前页的 <span> 添加 .class 属性 */
.pagination span.class {
display: inline-block;
padding: 5px 12px;
margin: 0 3px;
border: 1px solid #ddd;
border-radius: 3px;
background-color: #007bff;
color: #fff;
border-color: #007bff;
}
/* 首页、上一页、下一页、尾页等链接的特定样式 */
.pagination a.first, .pagination a.prev, .pagination a.next, .pagination a.last {
padding: 5px 10px;
}
注意: Destoon 在生成当前页码时,会使用 <span class="class">3</span> 这样的结构,所以我们用 .pagination span.class 来定义当前页样式。
常见问题排查 (FAQ)
为什么我的 {pages} 标签不显示,或者显示“暂无信息”?
- 原因1:数据为空。
{pages}的存在依赖于数据循环,如果你的{loop $tags ...}循环里没有任何数据,{pages}自然也不会被调用。- 解决方案: 检查你的数据库中是否有符合条件的数据,或者检查你的筛选条件是否正确。
- 原因2:变量错误。 确保你使用的变量名是正确的,
$tags,这个变量名通常在 PHP 的控制文件中定义,module/product/index.php。- 解决方案: 检查对应的 PHP 文件,确认
$tags数组是否被正确赋值。
- 解决方案: 检查对应的 PHP 文件,确认
分页的链接是 list.php?page=2,但我想要的是 /product/list-2.html 这样的伪静态链接。
- 原因: 这是由 Destoon 的 URL 重写规则决定的,默认情况下,分页会使用动态链接。
- 解决方案:
- 开启伪静态: 确保你在 Destoon 后台“系统设置” -> “URL 规则”中,为产品模块或其他相应模块开启了伪静态。
- 修改分页标签(可选): 在开启了伪静态后,Destoon 的分页系统通常会自动处理,生成
/product/list-2.html这样的链接,如果不行,可能需要检查你的.htaccess文件(Apache)或web.config文件(IIS)中的重写规则是否正确配置。
我想在分页里显示“共 X 条记录,共 X 页”这样的信息。
- Destoon 已经内置了这个功能。 默认情况下,
{pages}标签在生成时会包含类似<span class="pageinfo">共 100 条记录</span>的代码。 - 解决方案: 直接使用
{pages}标签,然后在你的 CSS 中对.pageinfo类进行样式美化即可。.pagination .pageinfo { margin-left: 10px; color: #999; }
在 Destoon 模板中调用分页非常简单:
- 基本用法: 在列表循环的下方,直接放置
{pages}- 自定义样式: 使用
{pages style='你的自定义类名'}参数,然后在 CSS 中为这个类名及其子元素(如a,span)编写样式。- 解决问题: 如果不显示,优先检查数据循环和后台数据是否存在。
- 自定义样式: 使用
掌握 {pages} 标签的使用,是进行 Destoon 二次开发的基础技能之一,希望这份详细的指南能帮到你!
