ページネーション
// +------------------------------------------ ------------------------+
// | PHP バージョン 4 |
// +------------------------------------------ ------------------------+
// |著作権 (c) 1997-2002 PHP グループ |
// +------------------------------------- ------------------------------------+
// |このソース ファイルには、PHP ライセンスのバージョン 2.02 が適用されます。 |
// |これは、このパッケージの LICENSE ファイルにバンドルされており、 |
// |ワールドワイドウェブから |
// | http://www.php.net/license/2_02.txt。 |
// | PHP ライセンスのコピーを受け取っておらず、 |
// |ワールドワイド ウェブを通じて入手するには、メモを |
// | までお送りください。 License@php.net なので、コピーをすぐに郵送できます。 |
// +------------------------------------------ ------------------------+
// |著者: Richard Heyes
// +------------------------------------------ ------------------------+
/**
* Pager クラス
*
* データセットのページングを処理します。使用方法については、提供されている example.php を参照してください。
*
*/
クラスポケベル {
/**
* 現在のページ
* @var integer
* /
var $_currentPage;
/**
* ページごとのアイテム数
* @var integer
*/
var $_perPage;
/**
* 総ページ数
* @var integer
*/
var $_totalPages;
/**
* アイテムデータ。数値インデックス付き配列...
* @var array
*/
var $_itemData ;
/**
* データ内の項目の合計数
* @var integer
*/
var $_totalItems;
/**
* このクラスによって生成されたページデータ
* @var array
*/
var $_pageData;
/**
* Constructor
*
* オブジェクトを設定し、項目の総数を計算します。
*
* @param $params パラメーターの連想配列 これには以下を含めることができます:
* currentPage 現在のページ番号 (オプション)
* ページあたりのアイテム数ページ (オプション)
* itemData ページへのデータ
*/
function pager($params = array( ))
{
グローバル $HTTP_GET_VARS;
$this->_currentPage = max((int)@$HTTP_GET_VARS['pageID'], 1);
$this->_perPage = 8;
$this->_itemData = array();
foreach ( $params as $name => $value) {
$this->{'_' . $name} = $value;
}
$this->_totalItems = count($this->_itemData);
}
/**
* 現在のページデータの配列を返します
*
* @param $pageID 希望のページID (オプション)
* @return array ページデータ
*/
function getPageData($pageID = null)
{
if (isset($pageID)) {
if (!empty($this->_pageData[$pageID])) {
return $this->_pageData[$pageID];
} else {
FALSE を返す;
}
}
if (!isset($this->_pageData) {
$this->_generatePageData();
}
return $this->getPageData($this->_currentPage) ;
}
/**
* 指定されたオフセットのページIDを返します
*
* @param $index ページIDを取得するためのオフセット
* @return int 指定されたオフセットのページID
*/
function getPageIdByOffset($index)
{
if (!isset($this->_pageData) {
$this->_generatePageData() ;
}
if (($index % $this->_perPage) > 0) {
$pageID = ceil((float)$index / (float)$this->_perPage);
} else {
$page ID = $index / $this->_perPage;
}
return $pageID;
}
/**
* 指定されたページ ID のオフセットを返します。たとえば、
* pageID 1 を渡し、perPage 制限が 10 の場合
* 1 と 10 が返されます。PageID が 2 の場合、
* 11 と 20 が返されます。
*
* @params pageID オフセットを取得するための PageID
* @return array 最初と最後のオフセット
*/
function getOffsetByPageId($pageid = null)
{
$pageid = isset($pageid) ? $pageid : $this->_currentPage;
if (!isset($this->_pageData)) {
$this->_generatePageData();
}
if (isset($this->_pageData)データ[ $pageid])) {
return array(($this->_perPage * ($pageid - 1)) + 1, min($this->_totalItems, $this->_perPage * $pageid));
} else {
戻り配列(0,0);
}
}
/**
* 戻る/次へおよびページのリンクを返します
*
* @param $back_html 戻るリンク内に配置する HTML
* @param $next_html 次のリンク内に配置する HTML
* @return 配列 戻る/ページ/次のリンク
*/
function getLinks($back_html = '<<戻る', $next_html = '次>>')
{
$url = $this->_getLinksUrl( );
$back = $this->_getBackLink($url, $back_html);
$pages = $this->_getPageLinks($url);
$next = $this->_getNextLink($url, $ next_html);
return array($back, $pages, $next, 'back' => $back, 'pages' => $pages, 'next' => $next);
}
/ **
* ページ数を返します
*
* @return int ページ数
*/
function numPages()
{
return $this->_totalPages;
}
/**
* 現在のページが最初のページかどうかを返します
*
* @return bool 最初のページかどうか
*/
function isFirstPage()
{
return ( $this-> _currentPage == 1);
}
/**
* 現在のページが最後のページかどうかを返します
*
* @return bool 最後のページかどうか
*/
function isLastPage()
{
return ($this->_currentPage == $this->_totalPages);
}
/* *
* 最後のページが完了したかどうかを返します
*
* @return bool 最終年齢が完了したかどうか
*/
function isLastPageComplete()
{
return !($this->_totalItems % $this->_perPage);
}
/**
* すべてのページデータを計算します
*/
function _generatePageData()
{
$this->totalItems = count($this->gt;_itemData);
$this->totalPages = ceil((float)$this->totalItems / (float)$this->gt;_perPage);
$i = 1;
if (!empty($this->_itemData)) {
foreach ($this->_itemData as $value) {
$this->_pageData[$i][] = $ value;
if (count($this->_pageData[$i]) >= $this->_perPage) {
$i++;
}
}
} else {
$this->_pageData = 配列();
}
}
/**
* 戻る/ページ/次のリンクの正しいリンクを返します
*
* @return string Url
*/
function _getLinksUrl()
{
global $HTTP_SERVER_VARS;
// URL が乱雑にならないようにクエリ文字列を整理します
$querystring = array();
if (!empty($HTTP_SERVER_VARS['QUERY_STRING'])) {
$qs =explode( 「&」、 $HTTP_SERVER_VARS['QUERY_STRING']);
for ($i = 0, $cnt = count($qs); $i < $cnt; $i++) {
list($name, $value) =explode('=', $qs[$i] );
if ($name != 'pageID') {
$qs[$name] = $value;
unset($qs[$i] );
}
}
if(is_array($qs) ){
foreach ($qs as $name => $value) {
$querystring[] = $name 。 '=' 。 $value;
}
}
return $HTTP_SERVER_VARS['SCRIPT_NAME'] 。 「?」 。 implode('&', $querystring) 。 (!empty($querystring) ? '&' : '') 。 'pageID=';
}
/**
* 戻るリンクを返します
*
* @param $url リンクで使用する URL
* @param $link リンクとして使用する HTML
* @return string リンク
*/
function _getBackLink($url, $link = '<< 戻る')
{
// 戻るリンク
if ($this-> _currentPage > 1) {
$back = '' 。 $link 。 '';
} else {
$back = '';
}
return $back;
}
/**
* ページのリンクを返します
*
* @param $url リンクで使用する URL
* @return string リンク
*/
関数 _getPageLinks($url)
{
/ / 範囲を作成します
$params['itemData'] = range(1, max(1, $this->_totalPages));
$pager =& new Pager($params);
$links = $pager-> ;getPageData($pager->getPageIdByOffset($this->_currentPage));
for ($i=0; $i
$links[$i] = '' 。 $links[$i] 。 '';
}
}
return implode(' ', $links);
}
/**
* 次のリンクを返します
*
* @param $url リンクで使用する URL
* @param $link リンクとして使用する HTML
* @return string リンク
*/
function _getNextLink($url, $link = 'Next >>')
{
if ($this->_currentPage < $this->_totalPages) {
$next = '' 。 $link 。 '';
} else {
$next = '';
}
return $next;
}
}
?>