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

destoon 模板中tag标签调用分页
(图片来源网络,侵删)

核心标签:{pages}

在 Destoon 的模板系统中,分页功能主要通过一个简单的标签 {pages} 来实现。

基本语法:

{pages}

这个标签会根据后台的分页设置和当前的数据总数,自动生成上一页、下一页、页码、首页、尾页等完整的分页 HTML 代码。


使用场景和完整示例

分页通常用在循环列表的末尾,下面我们以最常见的“产品列表页”为例。

destoon 模板中tag标签调用分页
(图片来源网络,侵删)

示例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>
<!-- 分页标签结束 -->

代码解释:

destoon 模板中tag标签调用分页
(图片来源网络,侵删)
  • {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 数组是否被正确赋值。

分页的链接是 list.php?page=2,但我想要的是 /product/list-2.html 这样的伪静态链接。

  • 原因: 这是由 Destoon 的 URL 重写规则决定的,默认情况下,分页会使用动态链接。
  • 解决方案:
    1. 开启伪静态: 确保你在 Destoon 后台“系统设置” -> “URL 规则”中,为产品模块或其他相应模块开启了伪静态。
    2. 修改分页标签(可选): 在开启了伪静态后,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 模板中调用分页非常简单:

  1. 基本用法: 在列表循环的下方,直接放置 {pages}
  2. 自定义样式: 使用 {pages style='你的自定义类名'} 参数,然后在 CSS 中为这个类名及其子元素(如 a, span)编写样式。
  3. 解决问题: 如果不显示,优先检查数据循环和后台数据是否存在。

掌握 {pages} 标签的使用,是进行 Destoon 二次开发的基础技能之一,希望这份详细的指南能帮到你!