首页 >后端开发 >php教程 >如何使用智能分页算法限制 PHP 中的分页链接?

如何使用智能分页算法限制 PHP 中的分页链接?

Patricia Arquette
Patricia Arquette原创
2024-10-17 16:10:03420浏览

How to Limit Pagination Links in PHP with a Smart Pagination Algorithm?

智能分页算法

实现分页时,通常需要限制显示的页面链接数量,以避免用户不知所措。这可以通过使用“智能”分页算法来实现,该算法仅显示当前页面的几个相邻页面。

示例算法

以下 PHP 代码演示了一种智能分页算法,该算法会截断页面列表仅显示当前页面的两个相邻页面:

<code class="php"><?php

// Define number of adjacent pages to show
$adjacents = 2;

// Define number of items per page
$limit = 5;

// Get current page number
$page = (int)$_GET["page"] ?? 1;

// Calculate first item to display on this page
$start = ($page - 1) * $limit;

// Get data
$data = $db
    ->query("SELECT * FROM mytable LIMIT $start, $limit")
    ->fetchAll();

// Calculate total number of pages
$total_pages = count($data);

// Setup page variables
$prev = $page - 1;
$next = $page + 1;
$lastpage = ceil($total_pages / $limit);
$lpm1 = $lastpage - 1;

// Generate pagination markup
$pagination = "<nav aria-label='page navigation'><ul class='pagination'>";

// Previous button
$pagination .= "<li class='page-item" . ($page === 1 ? " disabled" : "") . "'><a class='page-link' href='?page=$prev'>« previous</a></li>";

// First pages
$pagination .= "<li class='page-item" . ($page <= 2 ? " active" : "") . "'><a class='page-link' href='?page=1'>1</a></li>";
$pagination .= "<li class='page-item" . ($page <= 3 ? " active" : "") . "'><a class='page-link' href='?page=2'>2</a></li>";

// Ellipsis
$pagination .= "<li class='page-item disabled'><span class='page-link'>...</span></li>";

// Main pagination
if ($lastpage > 5 + ($adjacents * 2)) {
    // Close to beginning
    if ($page < 1 + ($adjacents * 2)) {
        for ($i = 3; $i <= 4 + ($adjacents * 2); $i++) {
            $pagination .= "<li class='page-item" . ($i === $page ? " active" : "") . "'><a class='page-link' href='?page=$i'>$i</a></li>";
        }
    }
    // Close to end
    elseif ($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) {
        for ($i = $page - $adjacents; $i <= $page + $adjacents; $i++) {
            $pagination .= "<li class='page-item" . ($i === $page ? " active" : "") . "'><a class='page-link' href='?page=$i'>$i</a></li>";
        }
    }
    // In middle
    else {
        $pagination .= "<li class='page-item" . ($lpm1 === $page ? " active" : "") . "'><a class='page-link' href='?page=$lpm1'>$lpm1</a></li>";
        $pagination .= "<li class='page-item" . ($lastpage === $page ? " active" : "") . "'><a class='page-link' href='?page=$lastpage'>$lastpage</a></li>";
    }
}
else {
    for ($i = 3; $i <= $lastpage; $i++) {
        $pagination .= "<li class='page-item" . ($i === $page ? " active" : "") . "'><a class='page-link' href='?page=$i'>$i</a></li>";
    }
}

// Ellipsis
$pagination .= "<li class='page-item disabled'><span class='page-link'>...</span></li>";

// Last pages
$pagination .= "<li class='page-item" . ($page >= $lastpage - 2 ? " active" : "") . "'><a class='page-link' href='?page=$lpm1'>$lpm1</a></li>";
$pagination .= "<li class='page-item" . ($page >= $lastpage - 1 ? " active" : "") . "'><a class='page-link' href='?page=$lastpage'>$lastpage</a></li>";

// Next button
$pagination .= "<li class='page-item" . ($page >= $lastpage ? " disabled" : "") . "'><a class='page-link' href='?page=$next'>next »</a></li>";

$pagination .= "</ul></nav>";

if ($lastpage <= 1) {
    $pagination = "";
}

echo $pagination;

// Display data
foreach ($data as $row) {
    // Display row data
}

echo $pagination;</code>

此算法使用相邻变量来控制当前页面每一侧显示的相邻页面的数量。它还包括以下功能:

  • 省略号:如果页面多于可以显示的数量,它会使用省略号来截断页面列表。
  • 第一页和最后一页: 无论当前页面如何,它始终显示第一页和最后一页。
  • 禁用按钮:当前页面分别是第一页或最后一页。
  • 活动类:它将“活动”类添加到当前页面的链接。

以上是如何使用智能分页算法限制 PHP 中的分页链接?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn