2017-04-06 11 views
0

私は以下のページネーションスクリプトを使用しています。問題は、それがページの連続カウントを与えることです。たとえば、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

は、あなたが行くように、あなたが最初のページを失っているよう改ページを行うための最善の方法であるが、これは、あなたが求めているものを行います。

$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未満の場合、最初のページが表示されます。その後、現在のページ、前に3つ、後に1つのページが表示されます(id = 5の場合は2,3,4,5,6となります)。

ドットは、現在のページ+ 1と最後の2ページの間にギャップがある場合に表示されますが、一度だけ表示されます(ブール値が何であるか)。

最後の2ページは常に表示されます。

大きなページセット(100まで)でテストされ、期待どおりに動作します。あなたは極端な外にあるいったん


改ページを行うには、より一般的な方法は、StackOverflowの自身がそれをしないよう、だろう、あなたは最初のページ、ドット、現在のページと夫婦どちらかの側、ドット、最後を示し、ページ。

1 ... 12 13 [14] 15 16 ...最初のページのアンカーなしの100

、私はここであなたのために提供してきたことで、それはクリックの多くを取ることができます大きなページセットを持つページ1に戻る。

この方法を実現するには、代わりにこのコードを使用します。変更はifロジックにあり、2つ目のブール値は両方のドットセットを処理します。

+0

[OK]をクリックします。私は2番目の方法に行きたいです。しかし、あなたのコードを私のものに置き換えたとき、3つのドットは最後の番号の後に来るだけでなく上記の例では '1 ... 12 13 [14] 15 16 ... 100'となりました。私が得ているドットだけが正しい位置にないと、あなたが言ったようにコードが動いています。 –

+0

どのページ'$ id'?両方のドットセットは、10ページセットの5ページと6ページにのみ表示されます。 – domwrap

+0

いいえ、あなたが言及している場所に現れていません..最後の数字の後に現れているページは何ですか私は..しかしあなたの解決策に感謝..ドットの事を除いて私は残りたいと思うものを得ました...ありがとう:) –

関連する問題