超强分页类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出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
php下用cookie统计用户访问网页次数的代码
May 09 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
PHP实现取得HTTP请求的原文
Aug 18 PHP
PHP中调用SVN命令更新网站方法
Jan 07 PHP
php保存任意网络图片到服务器的方法
Apr 14 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 PHP
Laravel框架之解决前端显示图片问题
Oct 24 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如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP中feof()函数实例测试
2014/08/23 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
php生出随机字符串
2017/07/06 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
表单元素事件 (Form Element Events)
2009/07/17 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
Numpy 多维数据数组的实现
2020/06/18 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
党校培训思想汇报
2013/12/30 职场文书
创业计划书如何编写
2014/02/06 职场文书
行政工作个人的自我评价
2014/02/13 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
Go timer如何调度
2021/06/09 Golang