超强分页类

<? php
/* *
*filename:ext_page.class.php
*@package:phpbean
*@author:feifengxlq<feifengxlq#gmail.com>
*@copyright:Copyright2006feifengxlq
*@license:version2.0
*@create:2006-5-31
*@modify:2006-6-1
*@modify:feifengxlq2006-11-4
*description:超强分页类,四种分页模式,默认采用类似baidu,google的分页风格。
*2.0增加功能:支持自定义风格,自定义样式,同时支持PHP4和PHP5,
*toseedetail,pleasevisithttp://www.phpobject.net/blog/read.php
*example:
*模式四种分页模式:
require_once('../libs/classes/page.class.php');
$page=newpage(array('total'=>1000,'perpage'=>20));
echo'mode:1<br>'.$page->show();
echo'<hr>mode:2<br>'.$page->show(2);
echo'<hr>mode:3<br>'.$page->show(3);
echo'<hr>mode:4<br>'.$page->show(4);
开启AJAX:
$ajaxpage=newpage(array('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));
echo'mode:1<br>'.$ajaxpage->show();
采用继承自定义分页显示模式:
demo:[url=http://www.phpobject.net/blog]http://www.phpobject.net/blog[/url]
*/
class page
{
/* *
*config,public
*/
var $page_name = " PB_page " ; // page标签,用来控制url页。比如说xxx.php?PB_page=2中的PB_page
var $next_page = ' > ' ; // 下一页
var $pre_page = ' < ' ; // 上一页
var $first_page = ' First ' ; // 首页
var $last_page = ' Last ' ; // 尾页
var $pre_bar = ' << ' ; // 上一分页条
var $next_bar = ' >> ' ; // 下一分页条
var $format_left = ' [ ' ;
var $format_right = ' ] ' ;
var $is_ajax = false ; // 是否支持AJAX分页模式

/* *
*private
*
*/
var $pagebarnum = 10 ; // 控制记录条的个数。
var $totalpage = 0 ; // 总页数
var $ajax_action_name = '' ; // AJAX动作名
var $nowindex = 1 ; // 当前页
var $url = "" ; // url地址头
var $offset = 0 ;

/* *
*constructor构造函数
*
*@paramarray$array['total'],$array['perpage'],$array['nowindex'],$array['url'],$array['ajax']...
*/
function page( $array )
{
if ( is_array ( $array )){
if ( ! array_key_exists ( ' total ' , $array )) $this -> error( __FUNCTION__ , ' needaparamoftotal ' );
$total = intval ( $array [ ' total ' ]);
$perpage = ( array_key_exists ( ' perpage ' , $array )) ? intval ( $array [ ' perpage ' ]) : 10 ;
$nowindex = ( array_key_exists ( ' nowindex ' , $array )) ? intval ( $array [ ' nowindex ' ]) : '' ;
$url = ( array_key_exists ( ' url ' , $array )) ? $array [ ' url ' ] : '' ;
}
else {
$total = $array ;
$perpage = 10 ;
$nowindex = '' ;
$url = '' ;
}
if (( ! is_int ( $total )) || ( $total < 0 )) $this -> error( __FUNCTION__ , $total . ' isnotapositiveinteger! ' );
if (( ! is_int ( $perpage )) || ( $perpage <= 0 )) $this -> error( __FUNCTION__ , $perpage . ' isnotapositiveinteger! ' );
if ( ! empty ( $array [ ' page_name ' ])) $this -> set( ' page_name ' , $array [ ' page_name ' ]); // 设置pagename
$this -> _set_nowindex( $nowindex ); // 设置当前页
$this -> _set_url( $url ); // 设置链接地址
$this -> totalpage = ceil ( $total / $perpage );
$this -> offset = ( $this -> nowindex - 1 ) * $perpage ;
if ( ! empty ( $array [ ' ajax ' ])) $this -> open_ajax( $array [ ' ajax ' ]); // 打开AJAX模式
}
/* *
*设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception
*
*@paramstring$var
*@paramstring$value
*/
function set( $var , $value )
{
if ( in_array ( $var , get_object_vars ( $this )))
$this -> $var = $value ;
else {
$this -> error( __FUNCTION__ , $var . " doesnotbelongtoPB_Page! " );
}

}
/* *
*打开倒AJAX模式
*
*@paramstring$action默认ajax触发的动作。
*/
function open_ajax( $action )
{
$this -> is_ajax = true ;
$this -> ajax_action_name = $action ;
}
/* *
*获取显示"下一页"的代码
*
*@paramstring$style
*@returnstring
*/
function next_page( $style = '' )
{
if ( $this -> nowindex < $this -> totalpage){
return $this -> _get_link( $this -> _get_url( $this -> nowindex + 1 ) , $this -> next_page , $style );
}
return ' <spanclass=" ' . $style . ' "> ' . $this -> next_page . ' </span> ' ;
}

/* *
*获取显示“上一页”的代码
*
*@paramstring$style
*@returnstring
*/
function pre_page( $style = '' )
{
if ( $this -> nowindex > 1 ){
return $this -> _get_link( $this -> _get_url( $this -> nowindex - 1 ) , $this -> pre_page , $style );
}
return ' <spanclass=" ' . $style . ' "> ' . $this -> pre_page . ' </span> ' ;
}

/* *
*获取显示“首页”的代码
*
*@returnstring
*/
function first_page( $style = '' )
{
if ( $this -> nowindex == 1 ){
return ' <spanclass=" ' . $style . ' "> ' . $this -> first_page . ' </span> ' ;
}
return $this -> _get_link( $this -> _get_url( 1 ) , $this -> first_page , $style );
}

/* *
*获取显示“尾页”的代码
*
*@returnstring
*/
function last_page( $style = '' )
{
if ( $this -> nowindex == $this -> totalpage){
return ' <spanclass=" ' . $style . ' "> ' . $this -> last_page . ' </span> ' ;
}
return $this -> _get_link( $this -> _get_url( $this -> totalpage) , $this -> last_page , $style );
}

function nowbar( $style = '' , $nowindex_style = '' )
{
$plus = ceil ( $this -> pagebarnum / 2 );
if ( $this -> pagebarnum - $plus + $this -> nowindex > $this -> totalpage) $plus = ( $this -> pagebarnum - $this -> totalpage + $this -> nowindex);
$begin = $this -> nowindex - $plus + 1 ;
$begin = ( $begin >= 1 ) ? $begin : 1 ;
$return = '' ;
for ( $i = $begin ; $i < $begin + $this -> pagebarnum; $i ++ )
{
if ( $i <= $this -> totalpage){
if ( $i != $this -> nowindex)
$return .= $this -> _get_text( $this -> _get_link( $this -> _get_url( $i ) , $i , $style ));
else
$return .= $this -> _get_text( ' <spanclass=" ' . $nowindex_style . ' "> ' . $i . ' </span> ' );
}
else {
break ;
}
$return .= " " ;
}
unset ( $begin );
return $return ;
}
/* *
*获取显示跳转按钮的代码
*
*@returnstring
*/
function select()
{
$return = ' <selectname="PB_Page_Select"> ' ;
for ( $i = 1 ; $i <= $this -> totalpage; $i ++ )
{
if ( $i == $this -> nowindex){
$return .= ' <optionvalue=" ' . $i . ' "selected> ' . $i . ' </option> ' ;
}
else {
$return .= ' <optionvalue=" ' . $i . ' "> ' . $i . ' </option> ' ;
}
}
unset ( $i );
$return .= ' </select> ' ;
return $return ;
}

/* *
*获取mysql语句中limit需要的值
*
*@returnstring
*/
function offset()
{
return $this -> offset;
}

/* *
*控制分页显示风格(你可以增加相应的风格)
*
*@paramint$mode
*@returnstring
*/
function show( $mode = 1 )
{
switch ( $mode )
{
case ' 1 ' :
$this -> next_page = ' 下一页 ' ;
$this -> pre_page = ' 上一页 ' ;
return $this -> pre_page() . $this -> nowbar() . $this -> next_page() . ' ' . $this -> select() . ' ' ;
break ;
case ' 2 ' :
$this -> next_page = ' 下一页 ' ;
$this -> pre_page = ' 上一页 ' ;
$this -> first_page = ' 首页 ' ;
$this -> last_page = ' 尾页 ' ;
return $this -> first_page() . $this -> pre_page() . ' [第 ' . $this -> nowindex . ' 页] ' . $this -> next_page() . $this -> last_page() . ' ' . $this -> select() . ' ' ;
break ;
case ' 3 ' :
$this -> next_page = ' 下一页 ' ;
$this -> pre_page = ' 上一页 ' ;
$this -> first_page = ' 首页 ' ;
$this -> last_page = ' 尾页 ' ;
return $this -> first_page() . $this -> pre_page() . $this -> next_page() . $this -> last_page();
break ;
case ' 4 ' :
$this -> next_page = ' 下一页 ' ;
$this -> pre_page = ' 上一页 ' ;
return $this -> pre_page() . $this -> nowbar() . $this -> next_page();
break ;
case ' 5 ' :
return $this -> pre_bar() . $this -> pre_page() . $this -> nowbar() . $this -> next_page() . $this -> next_bar();
break ;
}

}
/* ----------------privatefunction(私有方法)----------------------------------------------------------- */
/* *
*设置url头地址
*@param:String$url
*@returnboolean
*/
function _set_url( $url = "" )
{
if ( ! empty ( $url )){
// 手动设置
$this -> url = $url . (( stristr ( $url , ' ? ' )) ? ' & ' : ' ? ' ) . $this -> page_name . " = " ;
}
else {
// 自动获取
if ( empty ( $_SERVER [ ' QUERY_STRING ' ])){
// 不存在QUERY_STRING时
$this -> url = $_SERVER [ ' REQUEST_URI ' ] . " ? " . $this -> page_name . " = " ;
}
else {
//
if ( stristr ( $_SERVER [ ' QUERY_STRING ' ] , $this -> page_name . ' = ' )){
// 地址存在页面参数
$this -> url = str_replace ( $this -> page_name . ' = ' . $this -> nowindex , '' , $_SERVER [ ' REQUEST_URI ' ]);
$last = $this -> url[ strlen ( $this -> url) - 1 ];
if ( $last == ' ? ' || $last == ' & ' ){
$this -> url .= $this -> page_name . " = " ;
}
else {
$this -> url .= ' & ' . $this -> page_name . " = " ;
}
}
else {
//
$this -> url = $_SERVER [ ' REQUEST_URI ' ] . ' & ' . $this -> page_name . ' = ' ;
}
// endif
} // endif
} // endif
}

/* *
*设置当前页面
*
*/
function _set_nowindex( $nowindex )
{
if ( empty ( $nowindex )){
// 系统获取

if ( isset ( $_GET [ $this -> page_name])){
$this -> nowindex = intval ( $_GET [ $this -> page_name]);
}
}
else {
// 手动设置
$this -> nowindex = intval ( $nowindex );
}
}

/* *
*为指定的页面返回地址值
*
*@paramint$pageno
*@returnstring$url
*/
function _get_url( $pageno = 1 )
{
return $this -> url . $pageno ;
}

/* *
*获取分页显示文字,比如说默认情况下_get_text('<ahref="">1</a>')将返回[<ahref="">1</a>]
*
*@paramString$str
*@returnstring$url
*/
function _get_text( $str )
{
return $this -> format_left . $str . $this -> format_right;
}

/* *
*获取链接地址
*/
function _get_link( $url , $text , $style = '' ){
$style = ( empty ( $style )) ? '' : ' class=" ' . $style . ' " ' ;
if ( $this -> is_ajax){
// 如果是使用AJAX模式
return ' <a ' . $style . ' href="javascript: ' . $this -> ajax_action_name . ' (' ' . $url . ' ')"> ' . $text . ' </a> ' ;
}
else {
return ' <a ' . $style . ' href=" ' . $url . ' "> ' . $text . ' </a> ' ;
}
}
/* *
*出错处理方式
*/
function error( $function , $errormsg )
{
die ( ' Errorinfile<b> ' . __FILE__ . ' </b>,Function<b> ' . $function . ' ()</b>: ' . $errormsg );
}
}
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值