文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一个分页导航类

一个分页导航类

时间:2007-02-17  来源:PHP爱好者

<?php
// +----------------------------------------------------------------------+
// | PHP Version 4                                                        |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2002 The PHP Group                                |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license,      |
// | that is bundled with this package in the file LICENSE, and is        |
// | available at through the world-wide-web at                           |
// | http://www.php.net/license/2_02.txt.                                 |
// | If you did not receive a copy of the PHP license and are unable to   |
// | obtain it through the world-wide-web, please send a note to          |
// | [email protected] so we can mail you a copy immediately.               |
// +----------------------------------------------------------------------+
// | Authors: Richard Heyes <[email protected]>                         |
// +----------------------------------------------------------------------+

/**
* Pager class
*
* Handles paging a set of data. For usage see the example.php provided.
*
*/

class Pager {

/**
* Current page
* @var integer
*/
var $_currentPage;

/**
* Items per page
* @var integer
*/
var $_perPage;

/**
* Total number of pages
* @var integer
*/
var $_totalPages;

/**
* Item data. Numerically indexed array...
* @var array
*/
var $_itemData;

/**
* Total number of items in the data
* @var integer
*/
var $_totalItems;

/**
* Page data generated by this class
* @var array
*/
var $_pageData;

/**
* Constructor
*
* Sets up the object and calculates the total number of items.
*
* @param $params An associative array of parameters This can contain:
*                  currentPage   Current Page number (optional)
*                  perPage       Items per page (optional)
*                  itemData      Data to page
*/
function pager($params = array())
{
global $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);
}

/**
* Returns an array of current pages data
*
* @param $pageID Desired page ID (optional)
* @return array Page data
*/
function getPageData($pageID = null)
{
if (isset($pageID)) {
if (!empty($this->_pageData[$pageID])) {
return $this->_pageData[$pageID];
} else {
return FALSE;
}
}

if (!isset($this->_pageData)) {
$this->_generatePageData();
}

return $this->getPageData($this->_currentPage);
}

/**
* Returns pageID for given offset
*
* @param $index Offset to get pageID for
* @return int PageID for given offset
*/
function getPageIdByOffset($index)
{
if (!isset($this->_pageData)) {
$this->_generatePageData();
}

if (($index % $this->_perPage) > 0) {
$pageID = ceil((float)$index / (float)$this->_perPage);
} else {
$pageID = $index / $this->_perPage;
}

return $pageID;
}

/**
* Returns offsets for given pageID. Eg, if you
* pass it pageID one and your perPage limit is 10
* it will return you 1 and 10. PageID of 2 would
* give you 11 and 20.
*
* @params pageID PageID to get offsets for
* @return array  First and last offsets
*/
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 {
return array(0,0);
}
}

/**
* Returns back/next and page links
*
* @param  $back_html HTML to put inside the back link
* @param  $next_html HTML to put inside the next link
* @return array Back/pages/next links
*/
function getLinks($back_html = '<<Back', $next_html = 'Next >>')
{
$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);
}

/**
* Returns number of pages
*
* @return int Number of pages
*/
function numPages()
{
return $this->_totalPages;
}

/**
* Returns whether current page is first page
*
* @return bool First page or not
*/
function isFirstPage()
{
return ($this->_currentPage == 1);
}

/**
* Returns whether current page is last page
*
* @return bool Last page or not
*/
function isLastPage()
{
return ($this->_currentPage == $this->_totalPages);
}

/**
* Returns whether last page is complete
*
* @return bool Last age complete or not
*/
function isLastPageComplete()
{
return !($this->_totalItems % $this->_perPage);
}

/**
* Calculates all page data
*/
function _generatePageData()
{
$this->_totalItems = count($this->_itemData);
$this->_totalPages = ceil((float)$this->_totalItems / (float)$this->_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 = array();
}
}

/**
* Returns the correct link for the back/pages/next links
*
* @return string Url
*/
function _getLinksUrl()
{
global $HTTP_SERVER_VARS;

// Sort out query string to prevent messy urls
$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=';
}

/**
* Returns back link
*
* @param $url  URL to use in the link
* @param 上一篇      目录      下一篇 HTML to use as the link
* @return string The link
*/
function _getBackLink($url, 上一篇      目录      下一篇 = '<<Back')
{
// Back link
if ($this->_currentPage > 1) {
$back = '<a href="' . $url . ($this->_currentPage - 1) . '">' . 上一篇      目录      下一篇 . '</a>';
} else {
$back = '';
}

return $back;
}

/**
* Returns pages link
*
* @param $url  URL to use in the link
* @return string Links
*/
function _getPageLinks($url)
{
// Create the range
$params['itemData'] = range(1, max(1, $this->_totalPages));
$pager =& new Pager($params);
上一篇      目录      下一篇s =  $pager->getPageData($pager->getPageIdByOffset($this->_currentPage));

for ($i=0; $i<count(上一篇      目录      下一篇s); $i++) {
if (上一篇      目录      下一篇s[$i] != $this->_currentPage) {
上一篇      目录      下一篇s[$i] = '<a href="' . $this->_getLinksUrl() . 上一篇      目录      下一篇s[$i] . '">' . 上一篇      目录      下一篇s[$i] . '</a>';
}
}

return implode(' ', 上一篇      目录      下一篇s);
}

/**
* Returns next link
*
* @param $url  URL to use in the link
* @param 上一篇      目录      下一篇 HTML to use as the link
* @return string The link
*/
function _getNextLink($url, 上一篇      目录      下一篇 = 'Next >>')
{
if ($this->_currentPage <$this->_totalPages) {
$next = '<a href="' . $url . ($this->_currentPage + 1) . '">' . 上一篇      目录      下一篇 . '</a>';
} else {
$next = '';
}

return $next;
}
}

?>


php爱好者站 http://www.phpfans.net 为phper提供一切资讯.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载