簡體   English   中英

限制 PHP 分頁的頁數

[英]Limit pages numbers on PHP pagination

我有一個 PHP 分頁腳本。 當頁面記錄有幾百條時,分頁結果太大。 如何限制頁碼/鏈接?

示例:< 1 | 2 ... 37 | 38 | 39 | 40 | 41 | 42 ... 82 | 83 >

這是我的 PHP 腳本

<?php
$ppp = 10;
$rows = mysql_num_rows($query);

$nmpages = ceil($rows/$ppp);

// if current page is not 1, draw PREVIOUS link
if ($pg > 1 && $nmpages != 0) {
  echo "<a href=\"?pg=".($pg-1)."\">&lt;</a> ";
}

For($i = 1 ; $i <= $nmpages ; $i++) {
    If($i == $pg) {
      echo "<a href=\"#\" class=\"selected\"><b>".$i."</b></a> ";
   } else {
      echo "<a href=\"?pg=".$i."\">".$i."</a> ";
    }
}
// if current page less than max pages, draw NEXT link
if ($pg < $nmpages && $nmpages != 0) {
  echo "<a href=\"?pg=".($pg+1)."\">&gt;</a>";
}
?>

您知道如何使用我擁有的特定 PHP 腳本執行此操作嗎?

嘗試這個 :

    <?php
        $link = "";
 $page = $_GET['pg']; // your current page
 // $pages=20; // Total number of pages

  $limit=5  ; // May be what you are looking for

    if ($pages >=1 && $page <= $pages)
    {
        $counter = 1;
        $link = "";
        if ($page > ($limit/2))
           { $link .= "<a href=\"?page=1\">1 </a> ... ";}
        for ($x=$page; $x<=$pages;$x++)
        {

            if($counter < $limit)
                $link .= "<a href=\"?page=" .$x."\">".$x." </a>";

            $counter++;
        }
        if ($page < $pages - ($limit/2))
         { $link .= "... " . "<a href=\"?page=" .$pages."\">".$pages." </a>"; }
    }

    echo $link;
?>

輸出 :

//At page=1
1 2 3 4 ... 20 

//At page=12
1 ... 12 13 14 15 ... 20 

//At page=18
1 ... 18 19 20 

基於@Makesh 的代碼的改進或更確切地說是重寫。

function get_pagination_links($current_page, $total_pages, $url)
{
    $links = "";
    if ($total_pages >= 1 && $current_page <= $total_pages) {
        $links .= "<a href=\"{$url}?page=1\">1</a>";
        $i = max(2, $current_page - 5);
        if ($i > 2)
            $links .= " ... ";
        for (; $i < min($current_page + 6, $total_pages); $i++) {
            $links .= "<a href=\"{$url}?page={$i}\">{$i}</a>";
        }
        if ($i != $total_pages)
            $links .= " ... ";
        $links .= "<a href=\"{$url}?page={$total_pages}\">{$total_pages}</a>";
    }
    return $links;
}

輸出:

page = 1
1 2 3 4 5 6 ... 20 

page = 10
1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 20 

page = 19
1 ... 14 15 16 17 18 19 20 

這個問題的答案基本上是訪問一個關於Digg 樣式分頁的頁面,其中包括代碼示例。

這就是答案,但這個問題基本上是重復的。

嘗試制作一個頁面括號,例如比實際頁面少 10 和 10,例如更改 for 語句:

For($i = $pg-10 ; $i <= $pg+10 ; $i++)

我想通過當前頁面和總頁面獲取一組數字。 所以這就是我想出的。 我希望這對其他人有幫助-

注意 - 如果總頁數超過 10,則此項工作。我覺得如果總頁數少於 10,則只需將其顯示在單個 for 循環中。

function getSmartPageNumbers($currentPage, $totalPage)
{
    $pageNumbers = [];
    $diff = 2;
    
    $firstChunk = [1, 2, 3];
    $lastChunk = [$totalPage - 2, $totalPage - 1, $totalPage];
    
    if ($currentPage < $totalPage) {
        $loopStartAt = $currentPage - $diff;
        if ($loopStartAt < 1) {
            $loopStartAt = 1;
        }
        
        $loopEndAt = $loopStartAt + ($diff * 2);
        if ($loopEndAt > $totalPage) {
            $loopEndAt = $totalPage;
            $loopStartAt = $loopEndAt - ($diff * 2);
        }
        
        if (!in_array($loopStartAt, $firstChunk)) {
            foreach ($firstChunk as $i) {
                $pageNumbers[] = $i;
            }
            
            $pageNumbers[] = '.';
        }
        
        for ($i = $loopStartAt; $i <= $loopEndAt; $i++) {
            $pageNumbers[] = $i;
        }
        
        if (!in_array($loopEndAt, $lastChunk)) {
            $pageNumbers[] = '.';
            
            foreach ($lastChunk as $i) {
                $pageNumbers[] = $i;
            }
        }
    }
    
    return $pageNumbers;
}

測試:

getSmartPageNumbers(8, 20);
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => .
    [4] => 6
    [5] => 7
    [6] => 8
    [7] => 9
    [8] => 10
    [9] => .
    [10] => 18
    [11] => 19
    [12] => 20
)
getSmartPageNumbers(1, 20);
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => .
    [6] => 18
    [7] => 19
    [8] => 20
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM