分页数更多时分页显示

时间:2018-01-23 18:33:06

标签: php pagination

我使用以下代码进行简单分页。

但我想展示1 2 3 ..... 10 11 12类型的分页。

当有更多页面时,应相应调整分页。

我目前的简单分页php代码是:

<?php
if (isset($_GET["start"])){
    $start = $db->filter($_GET["start"]);   
}
if(empty($start)){
    $start= 0;
}

$maxrecords = 10;
$pagination_query = "select * from table order by id desc";
$pagination_count = $db->num_rows($pagination_query); 

$query = "select * from table order by id desc limit $start,$maxrecords"; // For record to display...
$result = $db->get_results($query);
?>

<div class="pagination">                            
<?php
  for($i=0;$i<ceil($pagination_count/$maxrecords);$i++){
      if($start==$i*$maxrecords){
?>
<a class='active'> <?php print $i+1;?></a>

<?php }else{ ?>

<a href="?start=<?php print $i*$maxrecords;?>"><?php print $i+1;?></a>
<?php 
  } 
}
?>


</div>                          

 <!-- Rest code to display records goes here -->

现在这段代码正常运作......

唯一的事情就是显示paginatin - 1 2 3 4 5 6 7喜欢无限制,具体取决于数据库中的总记录......

我想将其转换为 1 2 3 .... 22 23 24 等...

您的宝贵帮助表示赞赏......

1 个答案:

答案 0 :(得分:1)

我的回答首先是关于我所看到的有关寻呼机的一些注意事项。 然后,这个答案并没有提供预期的结果&#34;你想要,但我认为它可以更多&#34;灵活&#34;。

  1. 我认为您获取记录数量的查询似乎很昂贵。您可以使用count(*)

    $pagination_query = "select count(*) as num from table order by id desc" ;
    $pagination_count = $db->get_field_result() ; // I don't know your DB API.
    
  2. 我认为您获取当前结果的查询似乎并不关注$start$maxrecords(但我不知道您的数据库API) :

    $query = "select * from table order by id desc limit ".($start*$maxrecords).",$maxrecords"; // range 0+10, 10+10, 20+10, ...
    
  3. 您可以使用多个循环来显示开始页面,&#34;围绕当前&#34;和结束页面。

  4. 这是一个&#34;样本&#34;代码,不完美,但它可以帮助您对您的自己的寻呼机进行成像。

    $start = 7 ; // try with 1, 7, 24, 75...
    $pagination_count = 240 ; // Number of results
    $maxrecords = 10 ;
    
    $num_pages = ceil($pagination_count / $maxrecords) ;
    // echo "num_pages=$num_pages\n" ; // Just for dev
    
    
    // Begining
    for ($i = 0 ; $i < min(3, $num_pages); $i++) {
        echo render_page_link($i,$start) ;
    }
    echo ' (...) ' ;
    
    $have_middle = ($start > 3 && $start <= $num_pages - 3) ;
    if ($have_middle) {
        // Around current
        for ($i = max(3, $start - 3); $i < min($start + 3 - 1, $num_pages - 3) ; $i++) {
            echo render_page_link($i,$start) ;
        }
    }
    
    // Ending
    if ($have_middle) echo ' (...) ' ;
    for ($i = $num_pages - 3; $i < $num_pages ; $i++) {
        echo render_page_link($i,$start);
    }
    
    echo "\n"; // just because I test on CLI.
    
    // Here is a little function to display the link:
    // Currently just "plain text", but could be <a> or <span> with CSS...
    function render_page_link($index, $current = -1)
    {
        if ($index != $current - 1) return ($index+1) . " "  ;
        return "[".($index+1)."] " ;
    }
    

    1到24页的示例结果

    [1] 2 3  (...) 22 23 24 
    1 [2] 3  (...) 22 23 24 
    1 2 [3]  (...) 22 23 24 
    1 2 3  (...) [4] 5 6  (...) 22 23 24 
    1 2 3  (...) 4 [5] 6 7  (...) 22 23 24 
    1 2 3  (...) 4 5 [6] 7 8  (...) 22 23 24 
    1 2 3  (...) 5 6 [7] 8 9  (...) 22 23 24 
    1 2 3  (...) 6 7 [8] 9 10  (...) 22 23 24 
    1 2 3  (...) 7 8 [9] 10 11  (...) 22 23 24 
    1 2 3  (...) 8 9 [10] 11 12  (...) 22 23 24 
    1 2 3  (...) 9 10 [11] 12 13  (...) 22 23 24 
    1 2 3  (...) 10 11 [12] 13 14  (...) 22 23 24 
    1 2 3  (...) 11 12 [13] 14 15  (...) 22 23 24 
    1 2 3  (...) 12 13 [14] 15 16  (...) 22 23 24 
    1 2 3  (...) 13 14 [15] 16 17  (...) 22 23 24 
    1 2 3  (...) 14 15 [16] 17 18  (...) 22 23 24 
    1 2 3  (...) 15 16 [17] 18 19  (...) 22 23 24 
    1 2 3  (...) 16 17 [18] 19 20  (...) 22 23 24 
    1 2 3  (...) 17 18 [19] 20 21  (...) 22 23 24 
    1 2 3  (...) 18 19 [20] 21  (...) 22 23 24 
    1 2 3  (...) 19 20 [21]  (...) 22 23 24 
    1 2 3  (...) [22] 23 24 
    1 2 3  (...) 22 [23] 24 
    1 2 3  (...) 22 23 [24]