打破分页页数

时间:2017-04-06 18:16:25

标签: php jquery html pagination

我正在使用下面给出的分页脚本。问题是它给出了页面的连续计数。比方说,如果有10个页面,它会给出数字1 2 3 4 5 6 7 8 9 10(所有可点击的相应页面)。我想要的是在5之后打破分页计数。它应该显示1 2 3 4 5.......9 10。然后,当我点击第5页时,它应隐藏1并将显示6显示为2 3 4 5 6....9 10。请帮帮我。

$start = 0;
$limit = 1;

if(isset($_GET['id'])){
  $id = (!empty($_GET['id']))?$_GET['id']:null;
  $start = ($id-1)*$limit;
}else{
  $id = null;
}

$stmt = $pdo->prepare("SELECT ad_id, ad_description, ad_url, ad_memclicks, ad_visclicks, ad_status, avc_clicks FROM ads
                       LEFT JOIN ads_viewed_cost ON ads.ad_clicks = ads_viewed_cost.avc_id
                       WHERE ad_user = :user LIMIT $start, $limit");
$stmt-> bindValue(':user', $sessionid);
$stmt-> execute();

$count = $pdo->prepare("SELECT COUNT(*) as cnt FROM ads LEFT JOIN ads_viewed_cost ON ads.ad_clicks = ads_viewed_cost.avc_id WHERE ad_user = :user");
$count-> bindValue(':user', $sessionid);
$count-> execute();
$rf = $count->fetch();
$rows = $rf['cnt'];
$total = ceil($rows/$limit);

if($id>1){
  echo "<span class='pre'><a href='?id=".($id-1)."' class='button'>PREVIOUS</a></span>";
}
if($id!=$total){
  echo "<span class='next'><a href='?id=".($id+1)."' class='button'>NEXT</a></span>";
}

echo "<ul class='pagination'>";
for($i=1; $i<=$total; $i++){
  if($i == $id){
    echo "<li class='current'>".$i."</li>";
  }else{
    echo "<li><a href='?id=".$i."'>".$i."</a></li>";
  }
}
echo "</ul>";

1 个答案:

答案 0 :(得分:1)

我不认为你所描述的是最好的分页方式,因为你在去的第一页失去了,但这就是你所要求的。

$dots = false;
for ( $i=1; $i<=$total; $i++ ) {
    if( $i == $id ) {
        echo "<li class='current'>{$i}</li>";
    } else {
        if ( ( $id < 5 && $i < 5 ) || ( ( $i > $id-4 && $i < $id ) || $i > $total-2 || $i == $id+1 ) ) {
            echo "<li><a href='?id=".$i."'>{$i}</a></li>";
        } else {
            if ( $i > $id && !$dots ) {
                echo "...";
                $dots = true;
            }
        }
    }
}

如果当前$id小于5,则会显示第一页。之后,它显示当前页面,前三个,后面一个(所以当id = 5时,你会看到2,3,4,5,6)。

如果当前页面+ 1和最后两页之间存在间隙,则显示点,但只显示一次(布尔值是什么)。

始终显示最后两页。

使用更大的页面集(最多100个)进行测试,并按预期工作。

一种更常见的分页方式,就像StackOverflow本身所做的那样,一旦你超出极限,就会显示第一页,点,当前页面以及一对,点和最后一页。

  

1 ... 12 13 [14] 15 16 ... 100

如果没有第一页锚点,我在这里为您提供的内容,可能需要大量点击才能返回到第一页的大页面集。

要实现此方法,您可以使用此代码。更改位于if逻辑中,第二个布尔值处理两组点。

$dotsLow = false;
$dotsHi = false;
for ( $i=1; $i<=$total; $i++ ) {
    if( $i == $id ) {
        echo "<li class='current'>{$i}</li>";
    } else {
        if (
            ( $i == 1 || $i == $total ) ||
            ( $id < 5 && $i < 5 ) ||
            ( $id > $total-4 && $i > $total-4 ) ||
            ( $i >= $id-2 && $i <= $id+2)
        ) {
            echo "<li><a href='?id=".$i."'>{$i}</a></li>";
        } else {
            if ( $i > $id && !$dotsHi ) {
                echo "...";
                $dotsHi = true;
            }
            if ( $i < $id && !$dotsLow ) {
                echo "...";
                $dotsLow = true;
            }
        }
    }
}
相关问题