2016-08-16 6 views
2

私は絶対に完璧に作品を持っているコード:カウンターヘルプ - ピュアPHP - 自己作成したページネーション

<? 
$maxresults = 10; 
$total = $row[total]; 
$pagecount = $total/$maxresults; 
if (!isset($_GET['page'])) { $_GET['page'] = '1'; } 
$startcount = (($_GET['page'] - 1) * $maxresults + 1); 
$stopcount = $startcount + ($maxresults - 1); 
$lastTime = null; 
$i='0'; 
$sc = $startcount; 
$stmt=$db->prepare("// SELECT STATEMENT"); 
$stmt->bindParam(':user', $username); 
$stmt->execute(); 

    while ($row = $stmt->fetch()) { 
     if (!($sc > $stopcount)) { 
      $i++; 
      if($row['time'] !== $lastTime) { 
       if ($lastTime === NULL) { 
        echo '// close of loop'; 
       } else { 
        echo '// loop grouping as title'; 
       } 
       $lastTime = $row['time']; 
      } 

      if ($i >= $sc) { ?> 
       // the html to loop 
      <? 
       $sc++; 
      } 
     } 
    } 
?> 

進むと戻るボタンを作成するのは簡単です。 $ _GET ['page']> 1なら前のボタンをアクティブにすると、$ _GET ['page'] * 10> $ totalの場合は次のボタンをアクティブにします。

正しい数式とループはわかりませんが、常に正しい番号のページ番号を表示できます。私は常に3番目の数字に基づいて5を表示したい。だから、1は5つのリンクが必要です:1 - 5,2は1-5と表示され、3-4は2-6、5は3-7と表示されます。

明らかに、私は2と取得ページが3より大きい場合は、現在の$ _GET [ページ]から2を減算しますが、テスト結果を考慮してその結果が高いかどうかを確認する必要があります。したがって、結果が10以上の場合は2を表示し、16ページの場合は17と18は表示する170と180の結果が表示されるようにします。

おそらく私は長い間コードを見つめているだけですが、コードページを試しても私の頭に正しい数式やループが得られないようです。

答えて

1

これはかなり具体的な質問でした。誰かがそういった特定のものを手助けするかどうかは分かりませんでした。私は学んだと思います。あなたのソリューションを見た後、私はあなたに私の独自のソリューションを提供したいと思います

<ul> 
    <li class="<? if ($_GET['page'] < '2') { echo 'disabled' ; } ?>"> 
     <a href="<? 
        if ($_GET['page'] == '2') { 
         echo 'inbox.php'; 
        } else { 
         echo '?page='.($_GET[page] - 1); 
        } 
       ?>">Prev</a> 
    </li> <!-- previous button--> 

    <li style="<? if ($_GET['page'] - 2 < '1') { echo 'display:none;'; } ?>"> 
     <a href="?page=<? 
         echo ($_GET[page] -2); ?>"> 
         <? echo ($_GET[page] -2); ?> 
     </a> 
    </li> <!-- the button 2 before current spot if its greater than 0 --> 

    <li style="<? if ($_GET['page'] - 1 < '1') { echo 'display:none;'; } ?>"> 
     <a href="?page=<? 
         echo ($_GET[page] -1); ?>"> 
         <? echo ($_GET[page] -1); ?> 
     </a> 
    </li> <!-- the button 1 before current spot if its greater than 0 --> 

    <li class="disabled"> 
     <a href=""><? echo $_GET[page]; ?></a> 
    </li> <!-- current button disabled --> 

    <li style="<? if ($total - ($_GET[page] * 10) <= '0') { echo 'display:none;'; } ?>"> 
     <a href="?page=<? 
         echo ($_GET[page] + 1); ?>"> 
         <? echo ($_GET[page] +1); ?> 
     </a> 
    </li> <!-- the button 1 after current spot if results go that high --> 

    <li style="<? if ($total - ($_GET[page] + 1) * 10 <= '0') { echo 'display:none;'; } ?>"> 
     <a href="?page=<? 
          echo ($_GET[page] + 2); ?>"> 
          <? echo ($_GET[page] + 2); ?> 
     </a> 
    </li> <!-- the button 2 after current spot if results go that high --> 

    <li class="<? if ($total - ($_GET[page] * 10) <= '0') { echo 'disabled'; } ?>"> 
     <a href="?page=<? echo ($_GET[page] + 1); ?>">Next</a> 
    </li> <!-- the next button if results go that high --> 
</ul> 
+0

あなた自身の解決策を見つけたことを嬉しく思うブルース。 –

0

@bruce:ここ

は自分の質問への答えです。

$page = $_GET['page']; 
$max_pages = ceil($total/$maxresults); 
$min_pages = 1; 

$start = max($min_pages, $page-2); 
$end = min($max_pages, $start+2); 

$nav = ($page > $min_pages ? '<li><a href="?page=' . $page-1 . '">&lt;</a></li>' : ''); 
for ($i = $start; $i <= $end; $i++) 
    $nav .= '<li' . ($i == $page ? 'class="active"' : '') . '><a href="?page=' . $i . '">' . $i . '</a></li>'; 
$nav .= ($page < $max_pages ? '<li><a href="?page=' . $page+1 . '">&gt;</a></li>' : ''); 
関連する問題