
PHPで簡単ページング処理を実装する サンプルコード
2019-01-268 min read
目次
概要
PHPで簡単なページング処理を書いてみました。
環境
PHP 7.1.19 Smarty 3.1.33
作るもの
簡単なページング処理を作ります。 具体的には、ある取得したデータ(サンプルソースでは51件)に対し1ページに10件まで表示する機能を想定します。
ここで、ページの現在のステータスと、次もしくは前のページのリンクを表示する機能を実装します。
例えば 51件のアイテムを6ページにわけて10個づつ表示したい時、
最初の1ページ目は
1 / 6 ページ 次へ
2ページ目は
戻る 2 / 6 ページ 次へ
3ページ目は
戻る 3 / 6 ページ 次へ
最後のページは
戻る 6 / 6 ページ
という機能になります。
ソース
以下がソースコードです。
index.php
/**
* ページ数計算
*
* @param int $p 現在のページ番号
* @param int $min 最初のページ番号
* @param int $max 最後のページ番号
*/
function pagenation($p, $min, $max)
{
$last = null;
$next = null;
// 範囲外か
if (!($min <= $p && $p <= $max)) {
$p = 1; //強制的に1ページ目へ
}
// 最初のページか ?
if ($p === $min) {
return [
"next" => $min + 1,
"last" => null,
];
}
// 最後のページか ?
if ($p === $max) {
return [
"next" => null,
"last" => $max - 1,
];
}
return [
"next" => $p + 1,
"last" => $p - 1,
];
}
$p = (int) $_GET["p"]; //現在のページ番号
$items_count = 51; // 表示したいアイテム数
$items_limit = 10; // 1ページの上限
$min = 1; // 最初のページ番号
$max = (int) ceil($items_count / $items_limit); // 最後のページ番号
$page = pagenation($p, $min, $max);
<!DOCTYPE html>
<html>
<head></head>
<body>
<?php if ($page["last"] > 0) echo("<a href='/?p=" . $page["last"] . "' >戻る</a>") ?>
<span><?php echo(sprintf("%s / %s ページ", $p, $max)) ?></span>
<?php if ($page["next"] > 0) echo("<a href='/?p=" . $page["next"] . "' >次へ</a>") ?>
</body>
</html>
ポイントとなるのがページ数の計算です。 ページ数は以下の式で算出できます。
// $items_count 全件アイテム数
// $items_limit 1ページの上限
$max = (int) ceil($items_count / $items_limit); // 最後のページ番号
ceil関数は少数を切り上げするため、ceil(51 / 10)の時は $max = 6となります。 またこの時、$maxはfloat型であり、PHPではゆるい比較もできるため、念の為 int にキャストします。
Recommends
PHPで簡単ページング処理を実装する サンプルコード
2019-01-26
PHP + Smartyで超簡単なページング処理とサンプルコード
2019-01-26
PostfixでメールリレーしてMailHogで受信する開発用Dockerコンテナの構築
2021-05-19
php-fpmのステータスページを表示 Apache & htaccess
2021-03-24
Homebrew で php7.4 + Xdebug をインストール
2021-02-01
PHP-FPM(php7.4) Apache2.4 on Ubutnu20.04 Webサ...
2021-01-19
PHP-FPM(php7.4) Apache2.4 でWebサーバ構築 on CentOS...
2021-01-17
CentOS8 に PHP7.4 インストール
2021-01-17
UNIXドメインソケット通信 vs INETドメインソケット通信 php-fpmで動作させ...
2021-01-10
PHP-Parser で PHP5からPHP7で動くコードに自動修正するツールを作る夢をみ...
2020-12-29
PHP5からPHP7への移行ツールを作るための解析・自動修正ツールを調べる
2020-12-28
Amazon S3 と ローカルファイルのチェックサムの比較
2020-07-24
WordPressのDBから記事データを抽出する
2020-04-30
PHPerkaigi 2020 資料まとめ
2020-02-11
Ubuntu18.04にApache MariaDB PHP7.2 をセットアップ
2019-07-29
New Posts
[AWS CDK]ECS FargateでNestJSで作成したRESTfull APIデ...
2022-05-24
[AWS CDK]S3 CloudFront OAI Route53 構成 で NextJ...
2022-05-23
[CDK]SNS+SQS+DynamoDBでBounceとComplaint情報を収集する...
2022-04-11
[AmazonSES] node.js と ejs を利用してEメールを送信する
2022-04-09
GatsbyからNext.jsへのサイト移行
2022-04-04
[AWS CDK] Lambda で S3 オブジェクトを読み書きするStackの構築
2022-03-18
[AWS CDK] S3 + CloudFrontの構築とOriginAccessIden...
2022-03-09
[AWS CDK] Bastion(踏み台)構築。SSMとEC2InstanceConne...
2022-03-06
[AWS CDK] Cognito を構築
2022-03-04
AWS CDK v2 でVPC上にAPI Gateway + Lambda + RDS +...
2022-02-28
javascriptで累積和を解く
2022-02-27
AWS Amplify で monorepo を導入し 単一リポジトリで複数プロジェクトを...
2022-02-25
AWS CDK v2 で Lambda関数のデプロイ
2022-02-23
NextJSでDevToysのようなものを作成した
2022-02-22
JSで動的計画法を利用して部分和問題を解く
2022-02-20
Hot posts!
Proxy環境下でcurlを実行する
2019-12-07
OpenCVのMatのタイプ一覧表
2018-11-25
Macでも利用できるDBクライアント MySQL PostgreSQL Oracle など
2019-12-21
TablePlusを使ってみる。シンプルでモダンなSQLクライアントツール
2018-09-30
DBクライアントツールはDBeaverをおすすめしたい
2021-03-08
AWS S3のアクセスキーIDとシークレットアクセスキーの取得 作業用ユーザを作成
2019-06-12
AtCoderで初めて色がつくまでの話(茶色) レートが中々上がらなかった原因
2018-11-25
CentOS8でEPELとPowerToolsリポジトリの有効化
2020-11-30
Macでターミナルからポートスキャンを行う方法。
2018-12-09
Python + OpenCVのfillConvexPolyで複雑なポリゴンを描画する
2018-11-27
Date
▶︎
2022 年 (23)
▶︎
2021 年 (40)
▶︎
2020 年 (30)
▶︎
2019 年 (90)
▶︎
2018 年 (89)
▶︎
2017 年 (1)
Tags
Author