もともとJavaで作ったクラスだったんだけどPHPに移植してみた。
limitとoffsetの使えるDBMS用なんで、MySQLかPostgreSQL用かな。
class PageInfo {
var $limit;
var $rowCount;
var $pageNo;
var $pageCount;
/**
* コンストラクタ
* @param $pageNo 現在のページno
* @param $limit 1ページあたりの行数
*/
function __construct($pageNo, $limit) {
$this->limit = -1;
$this->rowCount = -1;
$this->pageNo = -1;
$this->pageCount = -1;
$this->setPageNo($pageNo);
$this->limit = $limit;
}
/**
* 現在のページnoをセットしなおす
* @param $pageNo
*/
function setPageNo($pageNo) {
if ($pageNo <= 0) $pageNo = 1;
$this->pageNo = $pageNo;
}
/**
* offsetを取得
*/
function getOffset() {
if ($this->pageNo == 0) return 0;
return ($this->pageNo – 1) * $this->limit;
}
/**
* 全体の行数をセット
* @param $rowCount
*/
function setRowCount($rowCount) {
$this->rowCount = $rowCount;
if ($this->rowCount == 0) {
$this->pageNo = 0;
}
if ($this->rowCount == 0 || $this->limit == 0) {
$this->pageCount = 0;
} else {
$this->pageCount =
floor($this->rowCount / $this->limit)
+ ($this->rowCount % $this->limit != 0 ? 1 : 0);
}
}
/**
* 行数をもとに現在のページnoをセットしなおす
* @param unknown_type $rowNo
*/
function getPageNoByRowNo($rowNo) {
return floor(($rowNo – 1) / $this->limit) + 1;
}
/**
* 次ページが存在する場合にtrue
*/
function isEnableNextPage() {
return $this->pageCount != 0 && $this->pageNo < $this->pageCount;
}
/**
* 前ページが存在する場合にtrue
*/
function isEnablePrevPage() {
return $this->pageCount != 0 && $this->pageNo > 1;
}
/**
* 次ページnoを取得
*/
function getNextPageNo() {
return $this->pageNo + 1;
}
/**
* 前ページnoを取得
*/
function getPrevPageNo() {
return $this->pageNo – 1;
}
}
例えばMySQLでの使い方はこんな感じ。
$pageNo = ※ページ番号をリクエストやらから取得
$pageInfo = new PageInfo($pageNo, 1ページあたりの表示件数);
$rowCount = ※全レコード数をselect count(*)やらで取得
$pageInfo->setRowCount($rowCount);
// 1ページあたりに表示するデータを検索するSQL
// $pageInfo->limitと$pageInfo->getOffset()で範囲取得用の値が取得できる。
$sql = “select * from example where xxx limit “.$pageInfo->limit.” offset “.$pageInfo->getOffset();
あとはSQLを実行すれば、現在のページ番号に応じた位置のレコードが取得できるはず。
んで、画面上では
●前ぺージリンク
<?php if ($pageInfo->isEnablePrevPage()) { ?>
<a href=”./xxx.php?pageNo=<?php echo $pageInfo->getPrevPageNo(); ?>”>前ぺ-ジ</a>
<?php } ?>
●次ぺージリンク
<?php if ($pageInfo->isEnableNextPage()) { ?>
<a href=”./xxx.php?pageNo=<?php echo $pageInfo->getNextPageNo(); ?>”>次ページ</a>
<?php } ?>
って感じで出力してあげればOK
JavaクラスのPHP移植ってはじめてやったけど、面倒ながらも意外になんとかなるもんだね。
Comments are closed.