当前位置: 首页 > 图文教程 > 网络编程 > PHP > php 分页类 扩展代码

PHP
PHP新手总结的PHP基础知识
php实现gb2312和unicode间编码转换
用php语言实现数据库连接详细代码介绍
详细解析 PHP 向 MySQL 发送数据过程
利用PHP V5开发多任务应用程序
详细讲解PHP中缓存技术的应用
php escapeshellcmd多字节编码漏洞
《PHP设计模式介绍》导言
《PHP设计模式介绍》第一章 编程惯用法
《PHP设计模式介绍》第二章 值对象模式
《PHP设计模式介绍》第三章 工厂模式
《PHP设计模式介绍》第四章 单件模式
《PHP设计模式介绍》第五章 注册模式
《PHP设计模式介绍》第六章 伪对象模式
《PHP设计模式介绍》第七章 策略模式
《PHP设计模式介绍》第八章 迭代器模式
《PHP设计模式介绍》第九章 观测模式
《PHP设计模式介绍》第十章 规范模式
《PHP设计模式介绍》第十一章 代理模式
《PHP设计模式介绍》第十二章 装饰器模式

PHP 中的 php 分页类 扩展代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 152 ::
收藏到网摘: n/a

采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式 原来发表过一个脱离数据库的分页类,最近使用的时候发现有些时候搜索的东西过于大的时候,采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式,使用上面很简单的,只需要多设置一个参数就可以了代码如下:
复制代码 代码如下:

<?php
/**
* 功能: 分页类,根据提供的数据总量和页面大小
* 创建日期:Fri Apr 20 16:45:21 CST 2007
* 最后更新:
* 作者: sanshi <[email protected]>
*/
class pagination
{
var $result = array();
var $pVar = "myp";//page参数分页记数
var $urlParamStr = ""; //页面的所有参数
var $sqlMoveNumber = 0; //数据的偏移量
var $is_post = false;
public function pagination()
{
}
public function set($sum,$pageSize,$page="",$is_post = false)
{
$this->is_post = $is_post;
$this->pVar = defined('PAGE_BAR') ? PAGE_BAR : 'myp' ;
$url = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
//计算出总页数
$curPage = $this->getCurPage();
$temp['sumPage'] = ceil($sum/$pageSize);
//修改了,页码超出的bug
if($curPage>$temp['sumPage']) $curPage=$temp['sumPage'];
$temp['curPage'] = $curPage;
$temp['nextPage'] = $temp['sumPage'] > $curPage ? ($curPage+1) : $temp['sumPage'];
$temp['upPage'] = $curPage >1 ? $curPage-1 :1;
$temp['endPage'] = $temp['sumPage'];
$this->urlParamStr = $this->_makeUrl($url);
$temp['urlPageStr'] = ($page=="") ? $this->_makeUrl($url) : $page.$this->urlParamStr;
$this->sqlMoveNumber = $curPage <2 ? 0 : ($curPage-1)*$pageSize;
$temp['sqlMoveNumber'] = $this->sqlMoveNumber;
$temp['rowNo'] = $sum;
$this->result = $temp;
return $this->result;
//print_r($temp);exit();
}
public function getSqlMove()
{
return $this->sqlMoveNumber;
}
public function getFooter()
{
$str= "共有 <FONT COLOR=#FF0033>{$this->result['rowNo']}</FONT> 条 <a href='{$this->result['urlPageStr']}{$this->result['upPage']}'";
if($this->is_post) $str .=" onclick='return sanshi_page_post(this.href,{$this->result['upPage']});' ";
$str .=" >上一页</a> ";
$str .=" 当前 {$this->result['curPage']} 页";
$str .=" 共有 {$this->result['sumPage']} 页";
$str .=" <a href='{$this->result['urlPageStr']}{$this->result['nextPage']}'";
if($this->is_post) $str .=" onclick='return sanshi_page_post(this.href,{$this->result['nextPage']});' ";
$str .=" >下一页</a>";
return $str;
}
public function getJumpPage()
{
if($this->is_post)
{
$str = " 跳到第 <select name='topage' size='1' onchange='sanshi_page_post(\"{$this->result['urlPageStr']}\"+this.value,this.value)'>\n";
}else{
$str = " 跳到第 <select name='topage' size='1' onchange='window.location=\"{$this->result['urlPageStr']}\"+this.value'>\n";
}
for($i=1;$i<=$this->result['sumPage'];$i++)
{
$str .= ($i==$this->result['curPage']) ? "<option value='$i' selected>$i</option>\n" : "<option value='$i'>$i</option>\n";
}
$str.="</select> 页";
//输出form表单
if($this->is_post)
{
$str .="<script type="text/javascript"><!--
function sanshi_page_post(jump_link,page_no)
{
document.getElementById('sanshi_goPage').action = jump_link; document.getElementById('{$this->pVar}').value = page_no;
document.getElementById('sanshi_goPage').submit();
return false;
}
// --></script>";
$str .="<form name='sanshi_goPage' id='sanshi_goPage' method=post>";
$str .="<input type=\"hidden\" name='{$this->pVar}' id='{$this->pVar}' value=0>";
$_POST = isset($_POST) ? $_POST : array();
foreach($_POST AS $k=>$v)
{
$str .="<input type=\"hidden\" name=\"{$k}\" id=\"{$k}\" value=\"{$v}\">";
}
$str .="</form>";
}
return $str;
}
public function getCurPage()
{
return isset($_GET[$this->pVar]) ? intval($_GET[$this->pVar]) : 1 ;
}
//分析出url的参数返回?后的参数,页码为空 包括问号
private function _makeUrl($url)
{
$arrayUrl=parse_url($url);
if(isset($arrayUrl['query']))
{
$q=$arrayUrl['query'];
parse_str($q,$qParam);
//print_r($qParam);
if(array_key_exists($this->pVar,$qParam))
{
foreach ($qParam AS $k=>$v)
{
if($k !=$this->pVar) $temp[$k] = $v;
}
$temp[$this->pVar] = "";
if(function_exists("http_build_query"))
return '?'.http_build_query($temp);
else
return '?'.sanshi_http_build_query($temp);
}else {
return "?{$q}&{$this->pVar}=";
}
}else{
return "?{$this->pVar}=";
}
}
}
function sanshi_http_build_query($a,$b='',$c=0)
{
if (!is_array($a)) return false;
foreach ((array)$a as $k=>$v)
{
if ($c)
$k=$b."[".$k."]";
elseif (is_int($k))
$k=$b.$k;
if (is_array($v)||is_object($v))
{
$r[]=http_build_query($v,$k,1);
continue;
}
$r[]=$k."=".urlencode($v);
}
return implode("&",$r);
}
/*
//print_r($_SERVER);
$p = new pagination();
$p->set(10,2,'thi.php');
echo $p->getFooter();
echo $p->getJumpPage();
*/
?>