>  기사  >  백엔드 개발  >  스마트 페이지 매김 알고리즘을 사용하여 PHP에서 페이지 매김 링크를 제한하는 방법은 무엇입니까?

스마트 페이지 매김 알고리즘을 사용하여 PHP에서 페이지 매김 링크를 제한하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-17 16:10:03385검색

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으로 문의하세요.