php 分页类 扩展代码
程序员文章站
2023-11-14 21:53:58
原来发表过一个脱离数据库的分页类,最近使用的时候发现有些时候搜索的东西过于大的时候,采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼...
原来发表过一个脱离数据库的分页类,最近使用的时候发现有些时候搜索的东西过于大的时候,采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式,使用上面很简单的,只需要多设置一个参数就可以了代码如下:
<?php
/**
* 功能: 分页类,根据提供的数据总量和页面大小
* 创建日期:fri apr 20 16:45:21 cst 2007
* 最后更新:
* 作者: sanshi <sanshi0815@tom.com>
*/
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();
*/
?>
复制代码 代码如下:
<?php
/**
* 功能: 分页类,根据提供的数据总量和页面大小
* 创建日期:fri apr 20 16:45:21 cst 2007
* 最后更新:
* 作者: sanshi <sanshi0815@tom.com>
*/
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();
*/
?>