現在、ページング機能を作っています。php初心者です。
タイトルのように、1...5,6,7,8,9...20 のようにしたいです。
ページング機能自体は完成しております。
しかし、もし20ページ分あるとしたら、
1,2,3,4,5,6,7,8,9,10................
と言う風に20ページぶん全て表示されてしまいます。
そこで、以下のようにしたいです。
*期待する動作
・現在のページを真ん中にしたいです。
・... は全ページを表示すると、見栄えが悪いのでこのようにしています。
・タイトルは"7"が現在表示しているページです。
もし"9"が現在のページだったら 1...7,8,9,10,11...20 のようになります。
下記は、ページ飛ばしするまでの遷移です。
"1"の場合
1,2,3,4,5...20
"2~4"の場合
1,2,3,4,5...20
"5~13"の場合
1...3,4,5,6,7...20
"14"の場合
1...12,13,14,15,16...20
"15の場合"
1...15,16,17,18,19,20
このようにしたいです。
見にくくて申し訳ございません。
サンプルを探してもなかなか見つけられません。
大変恐縮ですが、簡単で良いのでご教示いただけないでしょうか。
よろしくお願いいたします。
php
1<?php 2//DBの設置 3 4$per_page = 5; //1pageに何件表示するか 5 6if(isset($_GET['page'])){ 7$page = $_GET['page']; //htmlでリンクを押下時それぞれのページを取得 8}else{ 9 $page = 1; //もし、それ以外の値が入ってきたら1pageに飛ばす 10} 11 12try{ 13 $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASS); 14}catch(PDOException $e){ 15 echo $e->getMessage(); 16 exit; 17} 18 19$offset = $per_page * ($page -1); //offsetを計算 現在のページ -1 * 何件表示するか 20$sql = "select * from comments limit ".$offset.",".$per_page; // 21 22$comments = array(); 23foreach($dbh->query($sql) as $row){ 24 array_push($comments,$row); 25} 26 27$total = $dbh->query("select count(*) from comments")->fetchColumn(); //カラム数をカウント 28$totalPages = ceil($total/$per_page); //何ページ必要かを計算 29 30?>
html
1<!DOCTYPE html> 2<html lang="ja" dir="ltr"> 3 <head> 4 <meta charset="utf-8"> 5 <title>コメント一覧</title> 6 </head> 7 <body> 8 <h1>コメント一覧</h1> 9 <ul> 10 <?php foreach ($comments as $comment) :?> 11 <li><?=$comment['comment']?></li> 12 <?php endforeach;?> 13 </ul> 14 <?php for($i = 1; $i <=$totalPages; $i++):?> 15 <a href="?page=<?php echo $i;?>"><?php echo $i;?></a> 16 <?php endfor?> 17 </body> 18</html>




回答3件
あなたの回答
tips
プレビュー