PHP ajax 分页类代码


Posted in PHP onNovember 13, 2008

PHP ajax 分页类代码
<?php
//本分页类不处理SQL;
//大大的加快了分页功能
//http://blog.csdn.net/fkedwgwy
//潇湘博客--潇湘
/**
演示
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();
*/
class Zend_Page
{
/**
* config ,public
*/
var $page_name="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分页模式
var $next_ten_page=">>>";
var $per_ten_page="<<<";

/**
* private
*
*/
var $pagebarnum=10;//控制记录条的个数。
var $totalpage=0;//总页数
var $ajax_action_name='';//AJAX动作名
var $nowindex=1;//当前页
var $url="";//url地址头
var $offset=0;
var $total='';

/**
* constructor构造函数
*
* @param array $array['total'],$array['perpage'],$array['nowindex'],$array['url'],$array['ajax']...
*/
function Zend_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->total=$total;
$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>';
}

/**
* 获取显示“上十页”的代码
*
* @param string $style
* @return string
*/
function pre_ten_page($style='')
{
if(intval($this->nowindex/10)+1>1){
return $this->_get_link($this->_get_url(intval($this->nowindex/10)*10-5),$this->pre_ten_page,$style);
}
return '<span class="'.$style.'">'.$this->pre_ten_page.'</span>';
}

/**
* 获取显示"下十页"的代码
*
* @param string $style
* @return string
*/
function next_ten_page($style='')
{
if(intval($this->nowindex/10) <intval($this->totalpage/10)){
return $this->_get_link($this->_get_url((intval($this->nowindex/10)+1)*10+5),$this->next_ten_page,$style);
}
return '<span class="'.$style.'">'.$this->next_ten_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" onchange="location.replace(this.value)" >';
for($i=1;$i<=$this->totalpage;$i++)
{
if($i==$this->nowindex){
$return.='<option value='.$this->_get_url($i).' selected>'.$i.'</option>';
}else{
$return.='<option value='.$this->_get_url($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,$url='')
{
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='next';
$this->pre_page='last';
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;
case '6':
//启用了“上一页”,“下一页”,“最后一页”。可根据情况启用“第一页”。
//$this->first_page='<img src="'.HOSTPATH.'images/propageup.jpg" width="64" height="13" >';
$this->pre_page='<img src="'.HOSTPATH.'images/propageup.jpg" style="width:58px; height:18px;">';
$this->next_page='<img src="'.HOSTPATH.'images/propagedown.jpg" style="width:58px; height:18px;">';
$this->last_page='最后一页';
//return "<td width=39 align='center'>".$this->select()."</td>"."<td><span style='color:#666666'>页</span></td>"."<td width=72 align=right>".$this->first_page()."</td>"."<td width=72 align=right>".$this->pre_page()."</td>"."<td width=72 align=right>".$this->next_page()."</td>"."<td width=72 align=right>".$this->last_page()."</td>";
return "<td align='right'>共有[".$this->total."]件商品    ".$this->nowindex."/".$this->totalpage."页</td>"."<td width=145>".$this->pre_page()."  ".$this->next_page()."</td>"."<td width=145>".$this->last_page()."  ".$this->select()."  页  ";
break;
case '7':
$this->next_page='<img src="'.HOSTPATH.'images/arrpagedown.jpg"/>';
$this->pre_page='<img src="'.HOSTPATH.'images/arrpageup.jpg"/>';
$this->first_page='<img src="'.HOSTPATH.'images/arrhome.jpg"/>';
$this->last_page='<img src="'.HOSTPATH.'images/arrend.jpg"/>';
if($this->totalpage==0)
{$this->nowindex=0;}
return $this->first_page()."  ".$this->pre_page()."  ".$this->next_page()."  ".$this->last_page()."  ".$this->select();
break;
case '8':
//启用了“上一页”,“下一页”,“最后一页”。可根据情况启用“第一页”。
//$this->first_page='<img src="'.HOSTPATH.'images/propageup.jpg" width="64" height="13" >';
$this->pre_page='<img src="'.HOSTPATH.'images/propageup.jpg" style="width:58px; height:18px;">';
$this->next_page='<img src="'.HOSTPATH.'images/propagedown.jpg" style="width:58px; height:18px;">';
$this->last_page='最后一页';
if($this->totalpage==0)
{$this->nowindex=0;}
//return "<td width=39 align='center'>".$this->select()."</td>"."<td><span style='color:#666666'>页</span></td>"."<td width=72 align=right>".$this->first_page()."</td>"."<td width=72 align=right>".$this->pre_page()."</td>"."<td width=72 align=right>".$this->next_page()."</td>"."<td width=72 align=right>".$this->last_page()."</td>";
return "<td align='right'>共有[".$this->total."]条信息    ".$this->nowindex."/".$this->totalpage."页</td>"."<td width=145>".$this->pre_page()."  ".$this->next_page()."</td>"."<td width=145>".$this->last_page()."  ".$this->select()."  页  ";
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);
}
}
?>

PHP 相关文章推荐
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
php 生成文字png图片的代码
Apr 17 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
PHP采用get获取url汉字出现乱码的解决方法
Nov 13 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
PHP接收json 并将接收数据插入数据库的实现代码
Dec 01 PHP
php打包网站并在线压缩为zip
Feb 13 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 PHP
使用Limit参数优化MySQL查询的方法
Nov 12 #PHP
mysql limit查询优化分析
Nov 12 #PHP
令PHP初学者头疼十四条问题大总结
Nov 12 #PHP
PHP程序61条面向对象分析设计的经验小结
Nov 12 #PHP
Php Cookie的一个使用注意点
Nov 08 #PHP
MySql 按时间段查询数据方法(实例说明)
Nov 02 #PHP
php初学者写及时补给skype用户充话费的小程序
Nov 02 #PHP
You might like
领悟php接口中interface存在的意义
2013/06/27 PHP
php获取本周星期一具体日期的方法
2015/04/20 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
2016/06/15 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
利用python获得时间的实例说明
2013/03/25 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
应届生.NET方向面试题
2015/05/23 面试题
股东合作协议书范本
2014/04/14 职场文书
安全负责人任命书
2014/06/06 职场文书
禁毒宣传标语
2014/06/19 职场文书
市场营销工作计划书
2014/09/15 职场文书
2014年转正工作总结
2014/11/08 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
《学会看病》教学反思
2016/02/17 职场文书
win10安装配置nginx的过程
2021/03/31 Servers
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android