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

PHP
php ignore_user_abort与register_shutdown_function 使用方法
PHP写MySQL数据 实现代码
phpmyadmin 访问被拒绝的真实原因
PHP 程序员也要学会使用“异常”
php MYSQL 数据备份类
PHP 类型转换函数intval
php 图像函数大举例(非原创)
PHP 输出缓存详解
PHP COOKIE设置为浏览器进程
ie6 动态缩略图不显示的原因
php 将bmp图片转为jpg等其他任意格式的图片
discuz7 phpMysql操作类
一个php Mysql类 可以参考学习熟悉下
php 分页函数multi() discuz
学习discuz php 引入文件的方法DISCUZ_ROOT
php fckeditor 调用的函数
mysql 性能的检查和优化方法
PHP 高级课程笔记 面向对象
PHP 多进程 解决难题
php 404错误页面实现代码

PHP 中的 php 分页类 扩展代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 85 ::
收藏到网摘: 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();
*/
?>