当前位置:首页 > PHP

php分页实现类库实现

2026-03-13 02:37:30PHP

PHP 分页实现类库

在PHP中实现分页功能可以通过自定义类库或使用现有第三方库完成。以下是几种常见实现方式:

自定义分页类实现

基础分页类示例代码:

class Pagination {
    private $totalItems;
    private $itemsPerPage;
    private $currentPage;
    private $totalPages;
    private $maxPagesToShow = 5;

    public function __construct($totalItems, $itemsPerPage, $currentPage) {
        $this->totalItems = $totalItems;
        $this->itemsPerPage = $itemsPerPage;
        $this->currentPage = $currentPage;
        $this->totalPages = ceil($totalItems / $itemsPerPage);
    }

    public function getHtml() {
        $html = '<div class="pagination">';
        if ($this->totalPages > 1) {
            // 上一页
            if ($this->currentPage > 1) {
                $html .= '<a href="?page='.($this->currentPage-1).'">«</a>';
            }

            // 页码
            $start = max(1, $this->currentPage - floor($this->maxPagesToShow/2));
            $end = min($this->totalPages, $start + $this->maxPagesToShow - 1);

            for ($i = $start; $i <= $end; $i++) {
                $active = ($i == $this->currentPage) ? 'active' : '';
                $html .= '<a class="'.$active.'" href="?page='.$i.'">'.$i.'</a>';
            }

            // 下一页
            if ($this->currentPage < $this->totalPages) {
                $html .= '<a href="?page='.($this->currentPage+1).'">»</a>';
            }
        }
        $html .= '</div>';
        return $html;
    }
}

使用方式:

$totalItems = 100; // 总记录数
$itemsPerPage = 10; // 每页显示数
$currentPage = isset($_GET['page']) ? $_GET['page'] : 1;

$pagination = new Pagination($totalItems, $itemsPerPage, $currentPage);
echo $pagination->getHtml();

使用第三方库

  1. Pagerfanta 安装:

    php分页实现类库实现

    composer require pagerfanta/pagerfanta

    基本用法:

    use Pagerfanta\Pagerfanta;
    use Pagerfanta\Adapter\ArrayAdapter;
    
    $adapter = new ArrayAdapter($yourDataArray);
    $pagerfanta = new Pagerfanta($adapter);
    $pagerfanta->setMaxPerPage(10);
    $pagerfanta->setCurrentPage($_GET['page'] ?? 1);
    
    // 获取当前页数据
    $currentPageResults = $pagerfanta->getCurrentPageResults();
    
    // 渲染分页
    echo $pagerfanta->getCurrentPage();
  2. Laravel Pagination Laravel内置分页功能:

    php分页实现类库实现

    $users = DB::table('users')->paginate(15);
    return view('user.index', ['users' => $users]);

    在视图中显示:

    {{ $users->links() }}

数据库分页查询

MySQL分页查询示例:

$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;

$sql = "SELECT * FROM articles LIMIT $offset, $perPage";
$result = $conn->query($sql);

前端配合

Bootstrap分页样式示例:

<nav aria-label="Page navigation">
  <ul class="pagination">
    <li class="page-item"><a class="page-link" href="#">Previous</a></li>
    <li class="page-item active"><a class="page-link" href="#">1</a></li>
    <li class="page-item"><a class="page-link" href="#">2</a></li>
    <li class="page-item"><a class="page-link" href="#">3</a></li>
    <li class="page-item"><a class="page-link" href="#">Next</a></li>
  </ul>
</nav>

性能优化建议

  • 对于大数据量分页,避免使用LIMIT offset, count方式,改用基于游标的分页
  • 缓存分页结果减少数据库查询
  • 预计算总页数避免每次请求都计算
  • 使用AJAX实现无刷新分页

以上方法可根据项目需求选择合适的分页实现方案,复杂项目推荐使用成熟的第三方库如Pagerfanta,简单项目可使用自定义分页类。

标签: 分页类库
分享给朋友:

相关文章

vue前端分页怎么实现

vue前端分页怎么实现

使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 <el-pagination>,可以快速实现分页功能。需要安装 Element UI 并注册组件。 &…

vue实现分页组件

vue实现分页组件

Vue 分页组件实现 基础分页组件结构 创建一个名为 Pagination.vue 的文件,包含以下基础模板和逻辑: <template> <div class="pa…

vue实现网页分页

vue实现网页分页

Vue 实现网页分页的方法 使用计算属性实现分页 在 Vue 中可以通过计算属性对数据进行分页处理。定义一个 currentPage 和 pageSize,利用计算属性返回当前页的数据。 data(…

vue实现新闻分页

vue实现新闻分页

Vue 实现新闻分页的方法 数据准备与分页逻辑 在 Vue 中实现新闻分页需要准备新闻数据列表和分页参数。通常使用 data 属性存储当前页码和每页显示的新闻数量。 data() { retur…

vue完整实现分页

vue完整实现分页

Vue 分页组件实现 分页组件模板 分页组件通常包含页码按钮、上一页/下一页按钮和跳转功能。以下是一个基础模板结构: <template> <div class="pagina…

vue分页代码实现

vue分页代码实现

Vue 分页代码实现 在 Vue 中实现分页功能通常需要结合后端 API 返回的数据和前端的分页组件。以下是一个完整的实现示例,包括分页组件的封装和与后端数据的交互。 分页组件封装 创建一个可复用的…