一个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新手上路(五)
Oct 09 PHP
基于Zend的Config机制的应用分析
May 02 PHP
解析php file_exists无效的解决办法
Jun 26 PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
Apr 27 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
Swoole4.4协程抢占式调度器详解
May 23 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 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
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
js字符编码函数区别分析
2008/06/05 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
python中defaultdict的用法详解
2017/06/07 Python
Linux下多个Python版本安装教程
2018/08/15 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
教师档案管理制度
2014/01/23 职场文书
2014国培学习感言
2014/03/05 职场文书
我爱我家教学反思
2014/05/01 职场文书
小组口号大全
2014/06/09 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
解析redis hash应用场景和常用命令
2021/08/04 Redis
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers
Redis入门基础常用操作命令整理
2022/06/01 Redis