普通のphpで簡単にページングを実装する

以前にcakephpを使用してページングを作成したことがありました。この時はときに何も意識せずにサイトを参考にしながらパラメータを定義するだけだったのですが、内部的にはどのような処理でページングが行われているのかが謎でした。調べてみると分かりやすいサイトがあったので自分なりの説明などを加えながら紹介します。

ページングがどのような物なのかわからない方や、出来上がりが見たい方はページ下部のサンプルページを先に御覧ください。

ファイル作成

以下のようにファイルを作成します。

<?php
/** ページング関連の定数を定義 **/
//最大記事数(1ページにいくつの記事を表示するか)
define("ARTICLE_MAX_NUM","10");
//最初のページ番号(初めて表示したときに何ページ目を表示するか)
define("FIRST_VISIT_PAGE","1");

/** 記事の作成 $articles[0]~[42]にデータが入る **/
for($i=0; $i<43; $i++){
    $articles[] = ($i+1)."つ目の記事"; 
}
//全記事数を保存
$article_num = count($articles);
//全部で何ページあるか
$max_page = ceil($article_num / ARTICLE_MAX_NUM);


/** 現在のページ番号をGETで受け取る **/
if(!isset($_GET['page'])){
    //初期化(初めて訪れた時にはpageが設定されていない)
    $now_page = FIRST_VISIT_PAGE;
}else if(preg_match("/^[1-9][0-9]*$/",$_GET['page'])){
    //有効な数値かチェックして、念のためエスケープしてGETを格納する
    $now_page = htmlspecialchars($_GET['page'],ENT_QUOTES,'UTF-8');
}else{
    echo "pageが正しく設定されていなかったので".FIRST_VISIT_PAGE."に設定しました!<br>";
    $now_page = FIRST_VISIT_PAGE;
}


/** 記事表示 **/
//何記事目から表示すれば良いか
$start = ($now_page - 1) * ARTICLE_MAX_NUM;
//$articlesという配列の$start番目からARTICLE_MAX_NUM個の配列を取得
$output = array_slice($articles,$start,ARTICLE_MAX_NUM);
echo '全記事数:'.$article_num.' 現在のページ:'.$now_page;
echo '<br>【結果表示】<br>';
if(empty($output)){
    echo "記事はありません<br>";
}else{
    foreach($output as $val){
        echo $val.'<br>';
    }
}
echo '【終わり】<br>';


/** 「<-前へ」「TOP」「次へ->」のリンクを作成 **/
if($now_page > 1){
	echo '<a href=\'http://donatu33.sakura.ne.jp/note/00015/paging.php?page='.($now_page-1).'\')><-前へ </a>';
}
    echo '<a href=\'http://donatu33.sakura.ne.jp/note/00015/paging.php\')>| TOP |</a>';
if($now_page < $max_page){
	echo '<a href=\'http://donatu33.sakura.ne.jp/note/00015/paging.php?page='.($now_page+1).'\')> 次へ-></a>';
}
?>

プログラム中に多くのコメントを書いたので説明する点は特に無いです。フレームワークというのでしょうか。それを使用するときにはあまり意識する必要のないページングですが、中身は結構簡単でした。データベースなどと組み合わせるときにも簡単に応用できそうです。

サンプルページ

参考にさせていただいたサイト

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*画像認証