导航页 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 |

// | license@php.net so we can mail you a copy immediately. |

// +----------------------------------------------------------------------+

// | Authors: Richard Heyes |

// +----------------------------------------------------------------------+

/**

* 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 $link HTML to use as the link

* @return string The link

*/

function _getBackLink($url, $link = '<< Back')

{

// Back link

if ($this->_currentPage > 1) {

$back = '' . $link . '';

} 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);

$links = $pager->getPageData($pager->getPageIdByOffset($this->_currentPage));

for ($i=0; $i

if ($links[$i] != $this->_currentPage) {

$links[$i] = '' . $links[$i] . '';

}

}

return implode(' ', $links);

}

/**

* Returns next link

*

* @param $url URL to use in the link

* @param $link HTML to use as the link

* @return string The link

*/

function _getNextLink($url, $link = 'Next >>')

{

if ($this->_currentPage < $this->_totalPages) {

$next = '' . $link . '';

} else {

$next = ';

}

return $next;

}

}

?>

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

相关文章

相关视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值