Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man Paginierungslinks in PHP mit einem intelligenten Paginierungsalgorithmus begrenzen?

Wie kann man Paginierungslinks in PHP mit einem intelligenten Paginierungsalgorithmus begrenzen?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-17 16:10:03297Durchsuche

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

Intelligenter Paginierungsalgorithmus

Bei der Implementierung der Paginierung ist es oft wünschenswert, die Anzahl der angezeigten Seitenlinks zu begrenzen, um den Benutzer nicht zu überfordern. Dies kann durch die Verwendung eines „intelligenten“ Paginierungsalgorithmus erreicht werden, der nur wenige benachbarte Seiten zur aktuellen Seite anzeigt.

Beispielalgorithmus

Der folgende PHP-Code demonstriert einen intelligenten Paginierungsalgorithmus, der die Seiten abschneidet Seitenliste, um nur zwei an die aktuelle Seite angrenzende Seiten anzuzeigen:

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

Dieser Algorithmus verwendet die Variable „angrenzend“, um die Anzahl der angrenzenden Seiten zu steuern, die auf jeder Seite der aktuellen Seite angezeigt werden. Es enthält außerdem die folgenden Funktionen:

  • Auslassungspunkte: Wenn mehr Seiten vorhanden sind, als angezeigt werden können, wird die Seitenliste durch Auslassungspunkte gekürzt.
  • Erste und letzte Seite:Es werden immer die erste und die letzte Seite angezeigt, unabhängig von der aktuellen Seite.
  • Deaktivierte Schaltflächen:Die vorherigen und nächsten Schaltflächen werden deaktiviert, wenn die Die aktuelle Seite ist die erste bzw. letzte Seite.
  • Aktive Klasse: Fügt die „aktive“ Klasse zum Link der aktuellen Seite hinzu.

Das obige ist der detaillierte Inhalt vonWie kann man Paginierungslinks in PHP mit einem intelligenten Paginierungsalgorithmus begrenzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn