分页的风格php

时间:2016-07-01 09:12:57

标签: php pagination

我有一个分页代码:

//pagination

$result1=$mysqli->query("SELECT * FROM product");
$row_per_page=10 ; 
$rows=$result1->num_rows;
if ($rows>$row_per_page) $page=ceil($rows/$row_per_page);
else $page=1; 
if(isset($_GET['start']) && (int)$_GET['start'])
    $start=$_GET['start']; 
else 
    $start=0;
$result=$mysqli->query("SELECT * FROM product limit $start,$row_per_page"); 

//End pagination

while ($rows = $result->fetch_assoc()) { 
   echo $rows['name'];
}

$page_cr=($start/$row_per_page)+1;
for($i=1;$i<=$page;$i++)
{
     if ($page_cr!=$i) echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($i-1)."'>$i&nbsp;</a>"."</div>";
     else echo "<div class='pagination'>".$i." "."</div>";
}

此代码创建这样的分页 Pagination

是的,我想删除6 7 8 9等...并替换为“...”。当我点击第6页时,它将删除1 2 3 4 5 - 10 11 12 13等..,它只显示6 7 8 9如下图 [![分页] [2] [2]

enter image description here

我希望你能理解我的理想,我会尽力向你展示。 非常感谢你

1 个答案:

答案 0 :(得分:0)

以下是您的分页问题的解决方案,这是Google用于对其搜索结果进行分页的解决方案。基本上,这个解决方案背后的想法是:

在任何时间点,将显示最多5个分页链接,即从当前页面的角度来看,显示两个前任和后继页面。让我用两个场景来解释这个问题,

案例(1):当页数等于或小于5时(假设我们有4页)

在这种情况下,我们必须显示所有分页链接,没有任何前面或后面的点,如下所示:

// User is on page 1
1 2 3 4 5 ...
  - - - -

// User is on page 5
... 3 4 5 6 7 ...
    - -   - -

// User is on page 10
... 6 7 8 9 10
    - - - - 

案例(2):当页数大于5时(假设我们有10页)

在这种情况下,我们必须相应地显示分页链接和点,如下所示:

$page_cr=($start/$row_per_page)+1;

因此,在使用$page = 10获取当前页码后,此自定义分页系统的算法将如下所示:

  1. 检查页数是否大于5。如果大于5,则转到步骤2,否则转到步骤5.

  2. 查找页面的超集范围,例如1-10或1-20等。例如,如果// Superset range of pages $superset_range = range(1, $page); ,则此超集范围将为1-10。此步骤的代码如下:

    $page = 10
  3. 找到要显示的子页范围,例如1-5或3-7等。例如,如果// Subset range of pages to display $subset_range = range($page_cr - 2, $page_cr + 2); // Adjust the range foreach($subset_range as $p){ if($p <= 0){ array_shift($subset_range); $subset_range[] = $subset_range[count($subset_range) - 1] + 1; }elseif($p > $page){ array_pop($subset_range); array_unshift($subset_range, $subset_range[0] - 1); } } ,那么此子集范围将为1-5或3-7,或者6-10等,它可以是1到10之间的任何连续五页。此外,必要时调整此范围。此步骤的代码如下:

    // Display pagination links and dots
    if($subset_range[0] > $superset_range[0]){
        echo "<div class='pagination'>...&nbsp;</div>";
    }
    foreach($subset_range as $p){
        if($page_cr != $p){
            echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($p-1)."'>$p&nbsp;</a>"."</div>"; 
        }else{
            echo "<div class='pagination'>".$p." "."</div>";
        }
    
    }
    if($subset_range[count($subset_range) - 1] < $superset_range[count($superset_range) - 1]){
        echo "<div class='pagination'>&nbsp;...</div>";
    }
    
  4. 相应地显示分页链接和点。此步骤的代码如下:

    // Display all page links
    for($i = 1; $i <= $page; $i++){
        if($page_cr != $i){
            echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($i-1)."'>$i&nbsp;</a>"."</div>"; 
        }else{
            echo "<div class='pagination'>".$i." "."</div>";
        }
    }
    
  5. 使用旧代码显示所有分页链接,如下所示:

    $result1 = $mysqli->query("SELECT * FROM product");
    $row_per_page= 10; 
    $rows=$result1->num_rows;
    
    if ($rows > $row_per_page){ 
        $page=ceil($rows/$row_per_page);
    }else{
        $page=1;
    }
    if(isset($_GET['start']) && (int)$_GET['start']){
        $start=$_GET['start']; 
    }else{
        $start=0;
    }
    $result=$mysqli->query("SELECT * FROM product limit $start,$row_per_page"); 
    
    while ($rows = $result->fetch_assoc()) { 
       echo $rows['name'];
    }
    
    $page_cr=($start / $row_per_page) + 1; // Page number
    
    if($page > 5){
        // From the current page's perspective, display two predecessor and successor pages 
    
        // Superset range of pages
        $superset_range = range(1, $page);
    
        // Subset range of pages to display
        $subset_range = range($page_cr - 2, $page_cr + 2);
    
        // Adjust the range
        foreach($subset_range as $p){
            if($p <= 0){
                array_shift($subset_range);
                $subset_range[] = $subset_range[count($subset_range) - 1] + 1;
            }elseif($p > $page){
                array_pop($subset_range);
                array_unshift($subset_range, $subset_range[0] - 1);
            }
        }
    
        // Display pagination links and dots
        if($subset_range[0] > $superset_range[0]){
            echo "<div class='pagination'>...&nbsp;</div>";
        }
        foreach($subset_range as $p){
            if($page_cr != $p){
                echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($p-1)."'>$p&nbsp;</a>"."</div>"; 
            }else{
                echo "<div class='pagination'>".$p." "."</div>";
            }
    
        }
        if($subset_range[count($subset_range) - 1] < $superset_range[count($superset_range) - 1]){
            echo "<div class='pagination'>&nbsp;...</div>";
        }
    }else{
        // Display all page links
        for($i = 1; $i <= $page; $i++){
            if($page_cr != $i){
                echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($i-1)."'>$i&nbsp;</a>"."</div>"; 
            }else{
                echo "<div class='pagination'>".$i." "."</div>";
            }
        }
    }
    
  6. 所以这里是完整的代码:

    cmd.Parameters.Add(paam);
相关问题