php分页插件怎么选?php分页插件代码示例

在 PHP 中实现分页功能通常涉及两个主要部分:

  1. 后端逻辑:计算总页数、当前页、每页条数,并从数据库中获取对应页的数据。
  2. 前端展示:生成分页导航链接(如“上一页”、“1”、“2”、“3”、“下一页”)。

下面是一个完整、简洁、可复用的 PHP 分页类示例,适用于 MySQL 数据库(使用 PDO 或 mysqli 均可,这里以 PDO 为例)。

PHP增删改查、登录注册,上传图片,分页。
加载中
PHP增删改查、登录注册,上传图片,分页。

✅ 分页类:Paginator.php

<?php
class Paginator {
    private $totalItems;   // 总记录数
    private $itemsPerPage; // 每页显示条数
    private $currentPage;  // 当前页码
    private $totalPages;   // 总页数
    public function __construct($totalItems, $itemsPerPage = 10, $currentPage = 1) {
        $this->totalItems = (int)$totalItems;
        $this->itemsPerPage = (int)$itemsPerPage;
        $this->currentPage = max(1, (int)$currentPage); // 防止小于1
        $this->totalPages = ceil($this->totalItems / $this->itemsPerPage);
        // 防止页码超出范围
        if ($this->currentPage > $this->totalPages) {
            $this->currentPage = $this->totalPages;
        }
    }
    // 获取偏移量,用于 SQL LIMIT
    public function getOffset() {
        return ($this->currentPage - 1)  $this->itemsPerPage;
    }
    // 获取当前页
    public function getCurrentPage() 

php分页插件怎么选?php分页插件代码示例

{ return $this->currentPage; } // 获取总页数 public function getTotalPages() { return $this->totalPages; } // 是否有上一页 public function hasPrevPage() { return $this->currentPage > 1; } // 是否有下一页 public function hasNextPage() { return $this->currentPage < $this->totalPages; } // 生成分页 HTML public function render($baseUrl = '?page=') { if ($this->totalPages <= 1) { return ''; } $html = '<div class="pagination">'; // 上一页 if ($this->hasPrevPage()) { $html .= "<a href='{$baseUrl}{$this->currentPage - 1}' class='page-link'>« 上一页</a> "; } else { $html .= '<span class="page-link disabled">« 上一页</span> '; } // 页码按钮(简化版:只显示当前页前后2页) $start = max(1, $this->currentPage - 2); $end = min($this->totalPages, $this->currentPage + 2); for ($i = $start; $i <= $end; $i++) { if ($i == $this->currentPage) { $html .= "<span class='page-link active'>{$i}</span> "; } else { $html .= "<a href='{$baseUrl}{$i}' class='page-link'>{$i}</a> "; } } // 下一页

php分页插件怎么选?php分页插件代码示例

if ($this->hasNextPage()) { $html .= "<a href='{$baseUrl}{$this->currentPage + 1}' class='page-link'>下一页 »</a>"; } else { $html .= '<span class="page-link disabled">下一页 »</span>'; } $html .= '</div>'; return $html; } }

✅ 使用示例

假设你有一个 users 表,每页显示 10 条数据:

<?php
require_once 'Paginator.php';
// 1. 获取当前页码(默认第1页)
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// 2. 每页显示条数
$itemsPerPage = 10;
// 3. 连接数据库(PDO 示例)
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 4. 获取总记录数
$stmt = $pdo->query("SELECT COUNT() FROM users");
$totalItems = (int)$stmt->fetchColumn();
// 5. 创建分页器实例
$paginator = new Paginator($totalItems, $itemsPerPage, $page);
// 6. 获取当前页数据
$offset = $paginator->getOffset();
$stmt = $pdo->prepare("SELECT  FROM users LIMIT :limit OFFSET :offset");
$stmt->bindValue(':limit', $itemsPerPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 7. 显示数据
echo "<ul>";
foreach ($users as $user) {
    echo "<li>{$user['name']}</li>";
}
echo "</ul>";
// 8. 显示分页导航
echo $paginator->render('?page=');
?>

php分页插件怎么选?php分页插件代码示例


✅ 可选:添加 CSS 样式(美化分页)

.pagination {
    margin: 20px 0;
}
.page-link {
    padding: 8px 12px;
    margin: 0 2px;
    text-decoration: none;
    color: #007bff;
    border: 1px solid #dee2e6;
    border-radius: 4px;
}
.page-link:hover {
    background-color: #e9ecef;
}
.page-link.active {
    background-color: #007bff;
    color: white;
    border-color: #007bff;
}
.page-link.disabled {
    color: #6c757d;
    pointer-events: none;
}

✅ 优点

  • 面向对象,易于复用
  • 自动处理边界情况(如页码超出、无数据等)
  • 支持自定义每页条数
  • 生成语义化 HTML,便于样式定制

✅ 注意事项

  • 确保 $totalItems 和 $itemsPerPage 是整数,避免 SQL 注入或逻辑错误。
  • 如果数据量极大(如百万级),建议考虑使用游标分页(Cursor-based Pagination)而非传统偏移分页。
  • 可根据需求扩展:如显示“共 X 页”、“跳转到第 Y 页”等功能。

如需支持 MySQLi 或 ThinkPHP/Laravel 等框架的分页,也可以告诉我,我可以提供对应版本的实现。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/480635.html

赞 (0)
Python付费课程值得买吗?python学习资源推荐
上一篇 2026年7月10日 15:12
分享wifi密码怎么设置?手机连不上wifi密码忘了怎么办
下一篇 2026年7月10日 15:13

相关推荐

  • ICP网站和删除按钮是什么意思,ICP备案需要什么材料?

    想要弄清“icp网站 是什么意思”和“删除”按钮对应哪种操作,先看这句话:ICP网站指的是完成工信部ICP备案的网站,“删除”按钮在不同后台指向完全不同的操作,点错可能导致网站无法访问, 搞清楚你在哪个系统里点“删除”,比纠结按钮本身重要得多,icp网站是什么意思?先分清“备案”和“网站”两件事很多人把“ICP……

    2026年8月14日
    2500
  • 服务器客户端管理工具怎么用?远程批量管理多台服务器

    服务器客户端管理工具是集中管控多台主机、自动化部署与实时监控的核心基础设施,选择时需重点考量并发性能、安全性及与现有云环境的兼容性,在IT运维领域,面对日益复杂的分布式架构,手动登录每台服务器进行配置不仅效率低下,且极易引发人为错误,专业的管理工具通过统一入口,将分散的资源整合为可视化的操作面板,让运维人员从繁……

    2026年7月7日
    2300
  • 如何发送短信到手机?,有哪些简单实用的方法和技巧?

    发送短信到手机,看似简单,却常因号码格式、运营商限制或内容违规导致失败,掌握核心设置与排查方法,能大幅提升到达率,发送短信到手机显示成功但对方没收到是什么原因这种情况相当普遍,问题通常出在接收端或中间环节,以下按可能性高低排序排查,接收方号码与运营商状态号码是否停机、欠费或长时间未使用,运营商对静默号码有保护机……

    2026年7月28日
    500
  • isp虚拟主机如何实现自助管理与自助运维?,怎么操作?

    ISP虚拟主机的自助管理核心结论:只要选对控制面板、明确运维边界,多数网站故障都能在十分钟内自行定位解决,并不需要掌握底层服务器命令,虚拟主机自助管理面板哪个好用买ISP虚拟主机之前,先搞明白一个事:你真正在用的是主机商给你配好的控制面板,主机的日常开关、文件上传、数据库维护、域名绑定,全靠这个面板撑着,面板好……

    2026年8月18日
    400
  • iframe跨_iFrame

    关于iframe跨域,先给结论iframe跨域通信的核心解法是postMessage,配合正确的目标源校验,没有比这更通用的方案,不管理论上说得多么复杂,落到代码上就是一条message事件监听加一条postMessage调用,大多数前端团队在生产环境中遇到的跨域问题,靠这个API就能解决八成以上,如果碰到极端……

    2026年8月17日
    300
  • 服务器内部报错怎么处理?服务器内部错误怎么解决

    服务器内部并非单纯的硬件堆砌,而是CPU、内存、存储与网络模块在精密散热与电力管理下的协同作战系统,其核心逻辑在于通过物理隔离与逻辑优化实现高可用性与高性能平衡,服务器内部硬件架构解析走进服务器机房,你看到的往往是一排排沉默的机柜,但真正决定性能的是机柜内部那些精密的组件,服务器内部结构远比个人电脑复杂,它更像……

    2026年7月7日
    9200
  • AI仿手绘大模型好用吗?AI绘画生成图片怎么操作

    AI仿手绘大模型通过深度学习算法模拟人类笔触与肌理,将数字图像转化为具有独特艺术质感的仿手绘作品,其核心优势在于高效性、低成本及风格的可定制性,已成为内容创作者与商业设计的得力工具,技术原理与核心能力解析算法如何模拟“不完美”的艺术感传统的图像处理软件依赖固定的滤镜参数,而AI仿手绘大模型则基于生成对抗网络(G……

    2026年6月13日
    3810
  • 服务器代挂服务到底靠不靠谱?,怎么收费合理?

    服务器代挂本质是服务器租赁的深度定制服务,核心价值在于稳定性和无人值守的持续性,适合需要长期在线运行的挂机项目、脚本任务或自动化程序,服务器代挂多少钱?价格构成与行业标准价格是多数人接触服务器代挂时最先问的问题,代挂费用并非固定标价,而是由硬件配置、带宽大小、租用时长以及服务商运维水平共同决定,不同配置的月费区……

    2026年7月23日
    1300
  • Ollama的Modelfile怎么写?Ollama自定义模型参数配置详解

    编写Ollama的Modelfile核心在于通过特定语法指令(如FROM、PARAMETER、SYSTEM)定义模型来源、运行参数及系统提示词,从而实现本地大模型的个性化定制与微调,在本地部署大语言模型时,许多开发者容易陷入一个误区,认为必须拥有庞大的算力才能进行模型优化,Ollama提供的Modelfile机……

    2026年6月19日
    5400
  • 反向断言在逻辑推理中有什么作用,反向断言如何帮助提高代码测试覆盖率?

    反向断言主要用于验证系统在特定操作后不应出现的状态或元素,是自动化测试中过滤异常分支、防止误报的核心机制,反向断言和正向断言的区别及适用场景在软件自动化测试体系中,测试脚本扮演着极其严苛的质检员角色,正向断言是确认事物按照预期存在或发生,登录按钮是否显示在页面上”,而反向断言则是确认事物按照预期消失或从未出现……

    2026年7月19日
    600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注