PHPでページング

もともと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.