スマートなページネーション アルゴリズムを使用して PHP のページネーション リンクを制限する方法

Patricia Arquette
リリース: 2024-10-17 16:10:03
オリジナル
387 人が閲覧しました

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

スマート ページネーション アルゴリズム

ページネーションを実装する場合、ユーザーの負担を避けるために、表示されるページ リンクの数を制限することが望ましいことがよくあります。これは、現在のページに隣接する少数のページのみを表示する「スマート」ページネーション アルゴリズムを使用することで実現できます。

アルゴリズムの例

次の PHP コードは、ページ分割アルゴリズムを示しています。現在のページに隣接する 2 ページのみを表示するページ リスト:

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート