下面我将从 核心标签、模板文件、自定义样式、高级用法 四个方面进行详细说明。

destoon分页模板
(图片来源网络,侵删)

核心分页标签 [page]

列表模板(如 list_*.html)中实现分页最直接、最简单的方法。

语法:

[page]

作用: 这个标签会自动解析并生成当前列表页的分页导航,包括“首页”、“上一页”、“页码”、“下一页”、“末页”以及“总信息数”等。

使用场景: 当你只需要一个简单的、默认样式的分页时,直接在模板文件中插入 [page] 即可。

destoon分页模板
(图片来源网络,侵删)

示例: 假设你有一个新闻列表模板 list_news.html,你希望在列表下方显示分页:

<!-- list_news.html -->
<div class="list">
    {loop $items $item}
    <div class="item">
        <h3><a href="{$item[link]}">{$item[title]}</a></h3>
        <p class="desc">{str_cut($item[description], 100)}</p>
    </div>
    {/loop}
</div>
<!-- 在这里插入分页标签 -->
<div class="pages">
    [page]
</div>

当 Destoon 渲染这个模板时,[page] 会被替换成具体的分页 HTML 代码。


分页模板文件 page.htm

如果你想对分页的样式、显示的文字和结构进行完全自定义,就需要使用分页模板文件 page.htm

工作原理: Destoon 在生成 [page] 标签时,会自动加载并使用 /template/你的模板名称/page.htm 这个文件的内容来渲染分页,如果你没有这个文件,它会使用系统默认的样式。

文件路径: /template/你的模板名称/page.htm

如何自定义:

  1. 复制默认模板: 首先找到 Destoon 的默认模板文件,通常在 /template/default/page.htm
  2. 复制到你的模板目录: 将这个 page.htm 文件复制到你当前正在使用的模板目录下,/template/my_theme/page.htm
  3. 编辑 page.htm 现在你可以自由修改这个文件,来自定义分页的每一个部分。

page.htm 文件详解与自定义样式

page.htm 文件使用 Destoon 的模板语法,主要由 if 判断和变量组成。

文件结构解析

打开 page.htm,你会看到类似下面的结构:

<!-- page.htm -->
{if $pages}
<div class="pages">
    <!-- 首页 -->
    {if $first_page}
    <a href="{$first_page}" class="first">首页</a>
    {/if}
    <!-- 上一页 -->
    {if $prev_page}
    <a href="{$prev_page}" class="prev">上一页</a>
    {/if}
    <!-- 页码列表 -->
    {if $pages_start > 1}
    <a href="{$first_page}">1</a>
    {if $pages_start > 2}<span>...</span>{/if}
    {/if}
    {loop $pages $page}
    {if $page[current]}
    <span class="current">{$page[number]}</span>
    {else}
    <a href="{$page[url]}">{$page[number]}</a>
    {/if}
    {/loop}
    {if $pages_end < $total_pages}
    {if $pages_end < $total_pages - 1}<span>...</span>{/if}
    <a href="{$last_page}">{$total_pages}</a>
    {/if}
    <!-- 下一页 -->
    {if $next_page}
    <a href="{$next_page}" class="next">下一页</a>
    {/if}
    <!-- 末页 -->
    {if $last_page}
    <a href="{$last_page}" class="last">末页</a>
    {/if}
    <!-- 信息统计 -->
    <span class="info">共 {$total_results} 条</span>
</div>
{/if}

关键变量说明

变量 说明
$pages 一个数组,包含所有页码的信息。
$page[number] 当前循环的页码数字。
$page[url] 当前循环页码的链接地址。
$page[current] 布尔值,判断当前页码是否是正在浏览的页。
$first_page 首页的链接地址。
$prev_page 上一页的链接地址。
$next_page 下一页的链接地址。
$last_page 末页的链接地址。
$total_pages 总页数。
$total_results 总信息条数。
$pages_start 页码列表的起始页。
$pages_end 页码列表的结束页。

如何修改样式(以 Bootstrap 为例)

假设你想让分页样式适配 Bootstrap 框架,只需修改 page.htm 中的 class 名即可。

修改前 (默认样式):

<div class="pages">
    <a href="..." class="first">首页</a>
    <a href="..." class="prev">上一页</a>
    <span class="current">1</span>
    <a href="...">2</a>
    ...
</div>

修改后 (Bootstrap 样式):

<!-- page.htm -->
{if $pages}
<nav aria-label="Page navigation">
    <ul class="pagination">
        <!-- 首页 -->
        {if $first_page}
        <li><a href="{$first_page}" aria-label="First"><span aria-hidden="true">首页</span></a></li>
        {/if}
        <!-- 上一页 -->
        {if $prev_page}
        <li><a href="{$prev_page}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>
        {/if}
        <!-- 页码列表 -->
        {loop $pages $page}
        {if $page[current]}
        <li class="active"><span>{$page[number]} <span class="sr-only">(current)</span></span></li>
        {else}
        <li><a href="{$page[url]}">{$page[number]}</a></li>
        {/if}
        {/loop}
        <!-- 下一页 -->
        {if $next_page}
        <li><a href="{$next_page}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>
        {/if}
        <!-- 末页 -->
        {if $last_page}
        <li><a href="{$last_page}" aria-label="Last"><span aria-hidden="true">末页</span></a></li>
        {/if}
    </ul>
</nav>
{/if}

修改后,分页就会自动变成 Bootstrap 风格的列表样式,美观且响应式。


高级用法与常见问题

自定义分页显示条数

分页每页显示多少条信息,是在后台设置,而不是在模板里。

  • 路径: 登录 Destoon 后台 -> 系统设置 -> 系统参数 -> 分页设置
  • 关键项:
    • 列表分页数量:控制列表页(如新闻列表、产品列表)每页显示多少条。
    • 内容分页数量页(如新闻详情页)每页显示多少字后进行分页。

你可以在后台调整这些数值,无需修改模板文件。

AJAX 分页

Destoon 默认不支持纯 AJAX 分页(点击页码无刷新加载内容),因为这需要对 URL 和 SEO 进行特殊处理,传统的 [page] 方式是每次点击都重新加载整个页面,这是最稳定、对 SEO 最友好的方式。

如果你确实需要 AJAX 分页,通常需要通过修改 PHP 程序文件(如 module/moduleid/list.inc.php)和配合 JavaScript(如 jQuery)来实现,这属于二次开发范畴,相对复杂。

分页链接中添加额外参数

如果你想在分页链接中保留 URL 中的其他参数(如搜索关键词 keyword=Destoon),Destoon 默认会自动处理。 yourdomain.com/news/list-1.html 会变成 yourdomain.com/news/list-2.html?keyword=Destoon

系统会自动保留 后面的非分页参数。

方法 优点 缺点 适用场景
[page] 使用简单,无需额外文件。 样式固定,难以自定义。 快速实现,对样式要求不高的列表页。
page.htm 模板 高度灵活,可完全控制分页的 HTML 结构和 CSS 样式。 需要创建和编辑一个额外的文件。 强烈推荐,几乎所有需要自定义分页样式的项目都应使用此方法。

最佳实践:

  1. 始终使用 page.htm 文件 进行自定义。
  2. template/default/page.htm 复制文件到你的模板目录。
  3. 根据你的网站设计(如 Bootstrap、Element UI 或自定义 CSS)修改 page.htm 中的 HTML 标签和 class 名。
  4. 在你的列表模板(如 list_news.html)中,只需放置 [page] 标签即可。

通过这种方式,你可以轻松地为 Destoon 网站打造出与整体设计风格完美融合的分页效果。