2017-04-06 145 views
0

我正在使用下面給出的這個分頁腳本。問題是它給了頁面的連續計數。舉例來說,如果有10個頁面,它會給出數字1 2 3 4 5 6 7 8 9 10(全部可點擊各個頁面)。我想要的是在5之後打破分頁計數。它應該顯示1 2 3 4 5.......9 10。然後,當我點擊第5頁時,它應該隱藏1並顯示爲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

我不認爲你所描述的是當你丟失第一頁時做分頁的最好方法,但這就是你所要求的。

$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

沒有第一頁錨,與已經提供給你什麼,我在這裏,它可能需要點擊的LOT回到第一頁,設置一個大頁面。

要實現此方法,您可以改用此代碼。更改在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; 
      } 
     } 
    } 
} 
+0

我的錯好抱歉..你是對的。我想要去的第二個方法..但是,當我換成我的代碼,三個點的最後一個號碼後只來了,不是你在上面的例子中給出了'1 ... 12 13 [14] 15 16 ... 100' ..只有我得到的點不在正確的位置,否則代碼正如你所說的那樣工作。 –

+0

對於什麼頁面'$ id'?這兩個點集只會出現在第10頁的第5頁和第6頁。 – domwrap

+0

沒有它沒有出現在你提到的地方..它出現在最後一個數字之後,不管我在哪個頁面..但是謝謝你的解決方案..除了點東西我得到了我想要的休息......謝謝:) –