19D | さいたま市で活動するWebクリエイターの子育てブログ

子育ての日常を綴ったり、PHP・CSSやWebマーケティングなどの情報を不定期に書いています

about me

icon
web creator
Yuki Ishikura a.k.a iskruk
さいたま市を拠点に子育てとwebクリエイターとしての両立を目指しております。
詳細を見る

latest tweet

track record

85PHPでページャー機能を自作してみた

本当に何のブログかわからなくなりそうなので、ここらで技術的な記事を書いてみるテスト。

以前ページャーをPEARなどのライブラリを使わずに実装したかった時に書いてみた関数を公開します。汎用性が全く無いですが、行数も少なくシンプルなので改造はしやすいかなと...

function pager($total = null, $start = null, $count = null) {
	if(empty($total) || empty($count)) { return ''; }
	$now_page   = $start; 
	$total_rec  = $total; //総レコード数
	$per_page   = $count; //1ページに表示するレコード
	$link_num   = 4; //ページャーの前後のリンク数[偶数のみ]
	$total_page = ceil($total_rec / $per_page); //総ページ数

	//ここでページャーのページ数を判別
	if($now_page > $link_num && $total_page - $link_num > $now_page){
		$startpage = $now_page - $link_num;
		$finishpage = $now_page + $link_num;
	} elseif($now_page < $link_num || $now_page == $link_num) {
		$startpage = 1;
		$finishpage = $now_page + $link_num;
	} elseif($total_page - $link_num <= $now_page) {
		$startpage = $now_page - $link_num;
		$finishpage = $total_page;
	}
	//リクエストURLからpageクエリーのみを削除
	$get_url = preg_replace('/&page=([0-9]+)/','',$_SERVER["QUERY_STRING"]);
	$get_url = urldecode($get_url);
	if($per_page >= $total_rec) {
		//総レコード数が1ページ内に全部表示できる場合ページャーを表示しない
		$now_page = 0;
	} else {
		//開始ページの先頭が1以外の場合「最初」へのリンクを付ける
		if($startpage!="1"){ $pager .= sprintf('&nbsp;<a href="?'.$get_url.'&page=%d">最初</a>&nbsp;<', '1');}
		for($i = $startpage; $i <= $finishpage && $i <= $total_page; $i++){
			if($now_page==$i){
				$pager .= sprintf("&nbsp;<span class=\"current\">%d</span>", $i);
			}else{
				$pager .= sprintf('&nbsp;<a href="?'.$get_url.'&page=%1$d">%1$d</a>', $i);
			}
		}
	//最終ページが総ページ数よりも少なかった場合「最後」へのリンクを付ける
	if($finishpage < $total_page){ $pager .= sprintf('&nbsp;>&nbsp;<a href="?'.$get_url.'&page=%d">最後</a>', $total_page);}
	}
	return $pager;
}

$totalに総レコード数、$startに現在のページ数、$countに1ページに表示する件数を投げてもらうと、

&nbsp;<span class="current">1</span>&nbsp;<a href="?&amp;page=2">2</a>&nbsp;<a href="?&amp;page=3">3</a>&nbsp;<a href="?&amp;page=4">4</a>&nbsp;<a href="?&amp;page=5">5</a>&nbsp;&gt;&nbsp;<a href="?&amp;page=10">最後</a>

こんな感じのHTMLが返ってきます。
特に使用に関して制限は無いので自由に使ってください。