一个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时间不正确的解决方法
Apr 09 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
浅析PHP中的UNICODE 编码与解码
Jun 29 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
php常用的安全过滤函数集锦
Oct 09 PHP
php生成静态html页面的方法(2种方法)
Sep 14 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
Apr 02 PHP
ThinkPHP中session函数详解
Sep 14 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
PHP中md5()函数的用法讲解
Mar 30 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 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
[转帖]PHP世纪万年历
2006/12/06 PHP
PHP经典的给图片加水印程序
2006/12/06 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
python批量提交沙箱问题实例
2014/10/08 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
网络营销实训总结
2015/08/03 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
vue选项卡切换的实现案例
2022/04/11 Vue.js
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers