返回

ThinkPHP6框架轻松搞定ajax分页

前端

使用 ThinkPHP6 框架实现 Ajax 分页

简介

在 ThinkPHP6 框架中,Ajax 异步加载数据列表时,数字分页功能是必不可少的。本文将介绍一个专用的数字分页自定义封装类,帮助开发者轻松实现 Ajax 分页功能。

数字分页自定义封装类

数字分页自定义封装类位于项目根目录的 extend/lib/Paginator.php 文件中,代码如下:

namespace lib;

class Paginator
{
    // 总记录数
    private $total;

    // 每页显示记录数
    private $limit;

    // 当前页码
    private $page;

    // 总页码
    private $pcount;

    // 分页步长
    private $both;

    public function __construct($total, $limit = 10, $page = 1, $both = 3)
    {
        $this->total  = $total;
        $this->limit  = $limit;
        $this->page   = $page;
        $this->pcount = ceil($total / $limit);
        $this->both   = $both;
    }

    public function getHtml()
    {
        if ($this->pcount <= 1) {
            return '';
        }

        $html = '<ul class="pagination">';
        if ($this->page > 1) {
            $html .= '<li><a href="javascript:void(0);" onclick="loadPage(' . ($this->page - 1) . ');">上一页</a></li>';
        }

        for ($i = max(1, $this->page - $this->both); $i <= min($this->pcount, $this->page + $this->both); $i++) {
            if ($i == $this->page) {
                $html .= '<li class="active"><a href="javascript:void(0);">' . $i . '</a></li>';
            } else {
                $html .= '<li><a href="javascript:void(0);" onclick="loadPage(' . $i . ');">' . $i . '</a></li>';
            }
        }

        if ($this->page < $this->pcount) {
            $html .= '<li><a href="javascript:void(0);" onclick="loadPage(' . ($this->page + 1) . ');">下一页</a></li>';
        }

        $html .= '</ul>';

        return $html;
    }
}

使用方式

使用自定义封装类非常简单,只需要在控制器中实例化该类并调用 getHtml() 方法即可生成分页数字链接。

代码示例:

<?php

namespace app\controller;

use lib\Paginator;

class IndexController extends BaseController
{
    public function index()
    {
        // 获取总记录数
        $total = 100;

        // 实例化分页类
        $paginator = new Paginator($total, 10, 1, 3);

        // 生成分页数字链接
        $html = $paginator->getHtml();

        // 将分页数字链接传递给视图
        $this->assign('page', $html);

        // 渲染视图
        return $this->fetch();
    }
}

视图文件:

<?php echo $page; ?>

结论

通过使用这个数字分页自定义封装类,开发者可以轻松地实现 Ajax 分页功能,提升用户体验。

常见问题解答

Q1:如何设置每页显示的记录数?
A1:通过构造函数中的 $limit 参数设置,默认值为 10。

Q2:如何设置分页步长?
A2:通过构造函数中的 $both 参数设置,默认值为 3。

Q3:如何获取总页数?
A3:可以通过 $pcount 属性获取。

Q4:如何判断是否为第一页?
A4:通过 $page 属性与 1 比较即可。

Q5:如何判断是否为最后一页?
A5:通过 $page 属性与 $pcount 比较即可。