Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengehadkan Pautan Penomboran dalam PHP dengan Algoritma Penomboran Pintar?

Bagaimana untuk Mengehadkan Pautan Penomboran dalam PHP dengan Algoritma Penomboran Pintar?

Patricia Arquette
Patricia Arquetteasal
2024-10-17 16:10:03385semak imbas

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

Algoritma Penomboran Pintar

Apabila melaksanakan penomboran, selalunya wajar untuk mengehadkan bilangan pautan halaman yang dipaparkan untuk mengelakkan pengguna membebankan. Ini boleh dicapai dengan menggunakan algoritma penomboran "pintar" yang hanya menunjukkan beberapa halaman bersebelahan dengan halaman semasa.

Algoritma Contoh

Kod PHP berikut menunjukkan algoritma penomboran pintar yang memotong senarai halaman untuk menunjukkan hanya dua halaman bersebelahan dengan halaman semasa:

<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>

Algoritma ini menggunakan pembolehubah bersebelahan untuk mengawal bilangan halaman bersebelahan yang ditunjukkan pada setiap sisi halaman semasa. Ia juga termasuk ciri berikut:

  • Elipsis: Jika terdapat lebih banyak halaman daripada yang boleh dipaparkan, ia menggunakan elipsis untuk memotong senarai halaman.
  • Halaman pertama dan terakhir: Ia sentiasa menunjukkan halaman pertama dan terakhir, tanpa mengira halaman semasa.
  • Butang dilumpuhkan: Ia melumpuhkan butang sebelumnya dan seterusnya apabila halaman semasa ialah halaman pertama atau terakhir, masing-masing.
  • Kelas aktif: Ia menambahkan kelas "aktif" pada pautan halaman semasa.

Atas ialah kandungan terperinci Bagaimana untuk Mengehadkan Pautan Penomboran dalam PHP dengan Algoritma Penomboran Pintar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn