「どうやってPHPで記述されているのか知りたい!」
Webサイトの作成には欠かせないプログラミング言語である「PHP」ですが、ページングという言葉は聞いたことがありますか?
複数のページ(記事)がある場合に有効的なページング処理ですが、その仕組みについてはあまり詳しく知らない方も多いと思います。
この記事でページングについての仕組みと、記述方法を実際にコードを書きながら解説していきますので、ぜひ参考にしてみてくださいね!
目次
PHPのページングの仕組みとは?
まず「ページング」についてですが、これはWebサイトに複数のページがある場合、「ページ番号」や「次へ」「前へ」というボタンによってページを分けることを意味します。「ページネーション」ともいいます。
ユーザーは一度にたくさんの情報を取り入れることはできないため、たくさんのページがある場合はページングすることによって、ページを見やすくすることができます。
上記画像のようにページが1〜76までに分かれており、1ページごとに表示される記事が決まっています。ウェブカツ‼︎ブログでは、1ページあたり10記事が表示される仕組みとなっています。
これはSQLによって抽出することができ、今回のように10本の記事(レコード)を取り出したい場合には以下のように記述します。
1 |
SELECT * FROM product LIMIT 10 OFFSET 0 |
テーブルの全てのレコードの0番目から10レコード分を取得する
このように指示をすることができます。
これが2ページ目ならば、以下のように記述します。
1 |
SELECT * FROM product LIMIT 10 OFFSET 10 |
テーブルの全てのレコードの10番目から10レコード分を取得する
このような指示になります。
ページングを行うメリット
- サイトを見やすくする
- ページの表示時間を減らす
ページングを行うメリットは、主に2つです。
サイトを見やすくする
特にブログサイトなど、複数のページが存在する場合にはページングが必須です。
同じページにたくさんの情報量が詰まっていると、ユーザビリティが落ちてしまいます。とても不便なサイトと判断されて離脱率が上がってしまえば、SEO面でも悪影響です。
サイトを見やすくする工夫はとても重要なので、ページングによってサイトのページ分けを行っていきましょう!
ページの表示時間を減らす
1つのページの情報量が多いと、表示にかかる時間がとてもかかってしまいます。
同じく、サイトの表示速度はSEO面でも重要です。表示に時間がかかり過ぎてしまうとこちらもユーザビリティが落ちてしまうため、サイトのページングを行っていきましょう!
ページング処理の方法【基礎知識】
ではさらに詳しく、PHPを使ってページングをしていく方法についてご紹介したいと思います。
今回は情報を簡潔にするために、以下のデータを元に解説してきますね。
カテゴリー | 名前 |
料理 | ステーキ |
料理 | 味噌汁 |
料理 | 玉子焼き |
家電 | 掃除機 |
家電 | 冷蔵庫 |
家電 | 電子レンジ |
乗り物 | 車 |
乗り物 | 船 |
乗り物 | バイク |
乗り物 | 自転車 |
このように、10個のデータを使っていきます。基本的なページング方法は、以下のようにコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<?php define('MAX','2'); // 1ページの記事の表示数 $categorys = array( // 表示データを配列に入れる array('Category' => '料理', 'name' => 'ステーキ'), array('Category' => '料理', 'name' => '味噌汁'), array('Category' => '料理', 'name' => '玉子焼き'), array('Category' => '家電', 'name' => '掃除機'), array('Category' => '家電', 'name' => '冷蔵庫'), array('Category' => '家電', 'name' => '電子レンジ'), array('Category' => '乗り物', 'name' => '車'), array('Category' => '乗り物', 'name' => '船'), array('Category' => '乗り物', 'name' => 'バイク'), array('Category' => '乗り物', 'name' => '自転車'), ); $categorys_num = count($categorys); // トータルデータ件数 $max_page = ceil($Categorys_num / MAX); // トータルページ数※ceilは小数点を切り捨てる関数 if(!isset($_GET['page_id'])){ // $_GET['page_id'] はURLに渡された現在のページ数 $now = 1; // 設定されてない場合は1ページ目にする }else{ $now = $_GET['page_id']; } $start_no = ($now - 1) * MAX; // 配列の何番目から取得すればよいか // array_sliceは、配列の何番目($start_no)から何番目(MAX)まで切り取る関数 $disp_data = array_slice($categorys, $start_no, MAX, true); foreach($disp_data as $val){ // データ表示 echo $val['book_kind']. ' '.$val['book_name']. '<br />'; } for($i = 1; $i <= $max_page; $i++){ // 最大ページ数分リンクを作成 if ($i == $now) { // 現在表示中のページ数の場合はリンクを貼らない echo $now. ' '; } else { echo '<a href='/test.php?page_id='. $i. '')>'. $i. '</a>'. ' '; } } ?> |
ポイントとなるのが、現在のページを$_GET[‘page_id’]で取得する部分です。
1 |
/test.php?page_id=1 |
URLを上記のように渡します。そしてプログラム内で$_GET[‘page_id’]の値を取得することができます。
ページング処理の方法【応用知識】
では基本知識が分かったところで、次に応用知識を取り入れていきましょう!
応用ではGoogleの検索画面のように、「前へ」「次へ」というボタンを加える方法についてご紹介します。また、全件数がわかる場合には件数を表示させるためのコードも記述します。
カテゴリーがさらに増えたとして、先ほどのコードを修正してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
<?php define('MAX','10'); $books = array( array('Category' => '料理', 'name' => 'ステーキ'), array('Category' => '料理', 'name' => '味噌汁'), array('Category' => '料理', 'name' => '玉子焼き'), array('Category' => '家電', 'name' => '掃除機'), array('Category' => '家電', 'name' => '冷蔵庫'), array('Category' => '家電', 'name' => '電子レンジ'), array('Category' => '乗り物', 'name' => '車'), array('Category' => '乗り物', 'name' => '船'), array('Category' => '乗り物', 'name' => 'バイク'), array('Category' => '乗り物', 'name' => '自転車'), ・ ・ ・ ・ ・ ); $categorys_num = count($categorys); $max_page = ceil($categorys_num / MAX); if(!isset($_GET['page_id'])){ $now = 1; }else{ $now = $_GET['page_id']; } $start_no = ($now - 1) * MAX; $disp_data = array_slice($books, $start_no, MAX, true); foreach($disp_data as $val){ echo $val['book_kind']. ' '.$val['book_name']. '<br />'; } echo '全件数'. $categorys_num. '件'. ' '; // 全データ数の表示 if($now > 1){ // リンクをつけるかの判定 echo '<a href='/paging.php?page_id='.($now - 1).'')>前へ</a>'. ' '; } else { echo '前へ'. ' '; } for($i = 1; $i <= $max_page; $i++){ if ($i == $now) { echo $now. ' '; } else { echo '<a href='/test.php?page_id='. $i. '')>'. $i. '</a>'. ' '; } } if($now < $max_page){ // リンクをつけるかの判定 echo '<a href='/paging.php?page_id='.($now + 1).'')>次へ</a>'. ' '; } else { echo '次へ'; } ?> |
「前へ」「次へ」のボタンを加える際には、リンクを付けなければいけません。リンクがないとボタンとして機能しないため、注意しましょう。
まとめ
いかがでしたか?
この記事では、「PHPのページングの仕組みと記述方法」についてご紹介しました。
「ページング」と聞いて初めての方は難しく考えるかもしれないですが、PHPの学習に慣れてくると簡単に処理できるようになるでしょう。
この記事が参考になれば嬉しく思います。