Php 正在断开分页页码计数

Php 正在断开分页页码计数,php,jquery,html,pagination,Php,Jquery,Html,Pagination,我正在使用下面给出的分页脚本。问题是它提供了连续的页面计数。例如,如果有10个页面,它会给出数字12345678910(所有页面都可以点击)。我想要的是在5之后中断分页计数。它应该显示12345...910。然后,当我点击第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; $sta

我正在使用下面给出的分页脚本。问题是它提供了连续的页面计数。例如,如果有10个页面,它会给出数字
12345678910
(所有页面都可以点击)。我想要的是在5之后中断分页计数。它应该显示
12345...910
。然后,当我点击第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>";
$start=0;
$limit=1;
如果(isset($\u GET['id'])){
$id=(!empty($\u GET['id'])?$\u GET['id']:null;
$start=($id-1)*$limit;
}否则{
$id=null;
}
$stmt=$pdo->prepare(“从广告中选择广告id、广告描述、广告url、广告memclicks、广告visclicks、广告状态、avc_点击
左键加入广告\u已浏览\u广告成本。广告点击=广告\u已浏览\u成本。avc\u id
其中ad_user=:user LIMIT$start,$LIMIT”);
$stmt->bindValue(':user',$sessionid);
$stmt->execute();
$count=$pdo->prepare(“选择count(*)作为来自ads的cnt左键在ads上加入ads_viewed_cost.ad_clicks=ads_viewed_cost.avc_id,其中ad_user=:user”);
$count->bindValue(':user',$sessionid);
$count->execute();
$rf=$count->fetch();
$rows=$rf['cnt'];
$total=ceil($rows/$limit);
如果($id>1){
回声“;
}
如果($id!=$total){
回声“;
}
回声“
    ”;
    对于($i=1;$i我不认为您所描述的是进行分页的最佳方式,因为您正在丢失第一页,但这正是您所要求的

    $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;
                }
            }
        }
    }
    

    好的,对不起我的错误。你是对的。我想使用第二种方法。但是当我用我的代码替换你的代码时,三个点只出现在最后一个数字之后,而不是你在上面的示例中给出的
    1…12 13[14]15 16…100
    。只有我得到的点不在正确的位置,否则代码会按照你说的那样工作。
    $id
    ?哪一页的
    $id
    ?两个点集只会在10页集中的第5页和第6页上出现。不,它不会出现在你提到的地方。。它出现在最后一个数字之后,无论我在哪一页。。但是谢谢你你的解决方案..除了点的东西我得到了我想要的休息…谢谢:)奇怪,因为我和它的工作方式描述。您是否按原样接受了第二个代码段?删除HTML的工作示例我只是完全复制了它。。。正如我在第一条评论中提到的那样。。
    $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;
                }
            }
        }
    }