超强分页类2.0发布,支持自定义风格,默认4种显示模式


Posted in PHP onJanuary 02, 2007

超强分页类2.0发布,支持自定义风格,默认4种显示模式

看到论坛上有人求百度分页类,所以把几周前的分页类贴出来。
   2.0相对1.0修正如下:
  1、支持PHP4和PHP5
  2、增加了对ajax分页的功能
  3、优化了程序整体结构
  4、增加了自定义风格的功能

代码如下: 

<?  
/**  
 * filename: ext_page.class.php  
 * @package:phpbean  
 * @author :feifengxlq<feifengxlq#gmail.com><[url=http://www.phpobject.net/]http://www.phpobject.net/[/url]>  
 * @copyright :Copyright 2006 feifengxlq  
 * @license:version 2.0  
 * @create:2006-5-31  
 * @modify:2006-6-1  
 * @modify:feifengxlq 2006-11-4  
 * description:超强分页类,四种分页模式,默认采用类似baidu,google的分页风格。  
 * 2.0增加功能:支持自定义风格,自定义样式,同时支持PHP4和PHP5,  
 * to see detail,please visit [url=http://www.phpobject.net/blog/read.php]http://www.phpobject.net/blog/read.php[/url]?  
 * example:  
 * 模式四种分页模式:  
   require_once('../libs/classes/page.class.php');  
   $page=new page(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=new page(array('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));  
   echo 'mode:1<br>'.$ajaxpage->show();  
   采用继承自定义分页显示模式:  
   demo:http://www.phpobject.net/blog  
 */  
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构造函数  
  *  
  * @param array $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__,'need a param of total');  
     $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.' is not a positive integer!');  
  if((!is_int($perpage))||($perpage<=0))$this->error(__FUNCTION__,$perpage.' is not a positive integer!');  
  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)*$this->perpage;  
  if(!empty($array['ajax']))$this->open_ajax($array['ajax']);//打开AJAX模式  
 }  
 /**  
  * 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception  
  *  
  * @param string $var  
  * @param string $value  
  */  
 function set($var,$value)  
 {  
  if(in_array($var,get_object_vars($this)))  
     $this->$var=$value;  
  else {  
   $this->error(__FUNCTION__,$var." does not belong to PB_Page!");  
  }  
 }  
 /**  
  * 打开倒AJAX模式  
  *  
  * @param string $action 默认ajax触发的动作。  
  */  
 function open_ajax($action)  
 {  
  $this->is_ajax=true;  
  $this->ajax_action_name=$action;  
 }  
 /**  
  * 获取显示"下一页"的代码  
  *   
  * @param string $style  
  * @return string  
  */  
 function next_page($style='')  
 {  
  if($this->nowindex<$this->totalpage){  
   return $this->_get_link($this->_get_url($this->nowindex+1),$this->next_page,$style);  
  }  
  return '<span class="'.$style.'">'.$this->next_page.'</span>';  
 }  
 /**  
  * 获取显示“上一页”的代码  
  *  
  * @param string $style  
  * @return string  
  */  
 function pre_page($style='')  
 {  
  if($this->nowindex>1){  
   return $this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style);  
  }  
  return '<span class="'.$style.'">'.$this->pre_page.'</span>';  
 }  
 /**  
  * 获取显示“首页”的代码  
  *  
  * @return string  
  */  
 function first_page($style='')  
 {  
  if($this->nowindex==1){  
      return '<span class="'.$style.'">'.$this->first_page.'</span>';  
  }  
  return $this->_get_link($this->_get_url(1),$this->first_page,$style);  
 }  
 /**  
  * 获取显示“尾页”的代码  
  *  
  * @return string  
  */  
 function last_page($style='')  
 {  
  if($this->nowindex==$this->totalpage){  
      return '<span class="'.$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('<span class="'.$nowindex_style.'">'.$i.'</span>');  
   }else{  
    break;  
   }  
   $return.="\n";  
  }  
  unset($begin);  
  return $return;  
 }  
 /**  
  * 获取显示跳转按钮的代码  
  *  
  * @return string  
  */  
 function select()  
 {  
  $return='<select name="PB_Page_Select" >';  
  for($i=1;$i<=$this->totalpage;$i++)  
  {  
   if($i==$this->nowindex){  
    $return.='<option value="'.$i.'" selected>'.$i.'</option>';  
   }else{  
    $return.='<option value="'.$i.'">'.$i.'</option>';  
   }  
  }  
  unset($i);  
  $return.='</select>';  
  return $return;  
 }  
 /**  
  * 获取mysql 语句中limit需要的值  
  *  
  * @return string  
  */  
 function offset()  
 {  
  return $this->offset;  
 }  
 /**  
  * 控制分页显示风格(你可以增加相应的风格)  
  *  
  * @param int $mode  
  * @return string  
  */  
 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;  
  }  
 }  
/*----------------private function (私有方法)-----------------------------------------------------------*/  
 /**  
  * 设置url头地址  
  * @param: String $url  
  * @return boolean  
  */  
 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.'=';  
    }//end if      
   }//end if  
  }//end if  
 }  
 /**  
  * 设置当前页面  
  *  
  */  
 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);  
  }  
 }  
 /**  
  * 为指定的页面返回地址值  
  *  
  * @param int $pageno  
  * @return string $url  
  */  
 function _get_url($pageno=1)  
 {  
  return $this->url.$pageno;  
 }  
 /**  
  * 获取分页显示文字,比如说默认情况下_get_text('<a href="">1</a>')将返回[<a href="">1</a>]  
  *  
  * @param String $str  
  * @return string $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('Error in file <b>'.__FILE__.'</b> ,Function <b>'.$function.'()</b> :'.$errormsg);  
 }  
}  
?>

提供一个简单的演示demo
<?  
require_once('../libs/classes/page.class.php');  
$page=new page(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);  
echo '<hr>开始AJAX模式:';  
$ajaxpage=new page(array('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));  
echo 'mode:1<br>'.$ajaxpage->show();  
?> 

演示地址:http://traffic02.100steps.net/52site/test/page.php 
 
PHP 相关文章推荐
用PHP读注册表
Oct 09 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
php判断是否为json格式的方法
Mar 04 PHP
ThinkPHP3.1的Widget新用法
Jun 19 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
PHP实现适用于自定义的验证码类
Jun 15 PHP
学习PHP Cookie处理函数
Aug 09 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
ecshop添加菜单及权限分配问题
Nov 21 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 PHP
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 #PHP
实例(Smarty+FCKeditor新闻系统)
Jan 02 #PHP
PHP+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 #PHP
PHP文件上传实例详解!!!
Jan 02 #PHP
AJAX for PHP简单表数据查询实例
Jan 02 #PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
Dec 31 #PHP
PHP中通过ADO调用Access数据库的方法测试不通过
Dec 31 #PHP
You might like
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
PHP session常见问题集锦及解决办法总结
2007/03/18 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
javascript简易画板开发
2020/04/12 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
Python简单操作sqlite3的方法示例
2017/03/22 Python
Python中常见的异常总结
2018/02/20 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
python中spy++的使用超详细教程
2021/01/29 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
团购业务员岗位职责
2014/03/15 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL