一个PHP分页类的代码


Posted in PHP onMay 18, 2011

下面看这一段代码:
PHP

<? 
/** 
* filename: ext_page.class.php 
* @package:phpbean 
* @author :feifengxlq<feifengxlq#gmail.com><http://www.phpobject.net/> 
* @copyright :Copyright 2006 feifengxlq 
* @license:version 2.0 
* @create:2006-5-31 
* @modify:2006-6-1 
* @modify:feifengxlq 2006-11-4 
* description: 分页类,四种分页模式 
* 2.0增加功能:支持自定义风格,自定义样式,同时支持PHP4和PHP5, 
* to see detail,please visit http://www.phpobject.net/blog/read.php? 
* 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页 
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)*$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); 
} 
} 
$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(); 
?>

其实,我现在的工作是做电话录音卡这种硬件的电话录音系统软件的,对于一些代码还是很敏感,不只是学习php,学习任何一门编程语言都需要多读,多写,多想!
PHP 相关文章推荐
php header示例代码(推荐)
Sep 08 PHP
PHP防止跨域提交表单
Nov 01 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
ThinkPHP基本的增删查改操作实例教程
Aug 22 PHP
php的sso单点登录实现方法
Jan 08 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
ThinkPHP模型详解
Jul 27 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
php快速排序原理与实现方法分析
May 26 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 PHP
PHP sprintf()函数用例解析
May 18 #PHP
PHP 命令行参数详解及应用
May 18 #PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 #PHP
JS与PHP向函数传递可变参数的区别实例代码
May 18 #PHP
php的list()的一步操作给一组变量进行赋值的使用
May 18 #PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 #PHP
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
May 17 #PHP
You might like
通过文字传递创建的图形按钮
2006/10/09 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
python脚本监控docker容器
2016/04/27 Python
详解python 发送邮件实例代码
2016/12/22 Python
Django自定义分页效果
2017/06/27 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
Sanic框架流式传输操作示例
2018/07/18 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
Python3内置模块random随机方法小结
2019/07/13 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
2014年征兵标语
2014/06/20 职场文书
电教室标语
2014/06/20 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
对照检查剖析材料
2014/09/30 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
简单的辞职信模板
2015/05/12 职场文书
资产移交协议书
2016/03/24 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python
MySQL sql模式设置引起的问题
2022/05/15 MySQL