这个类需要用到一些额外的文件,下面补上
复制内容到剪贴板
代码:
<?php
/*
* 分页类
*/
class lib_Page
{
//数据库对象
private $page_db;
//sql语句
public $page_sql;
public $page_sqlmode;
public $page_sqlaction;
//单位-unit 提示-tit
public $page_unit;
public $page_tit;
//是否起用AJAX
public $page_ajax;
//当页页码显示个数
public $page_space;
//模板控制 isout-是否输出模板 template-模板名称
public $page_isout;
public $page_template;
//图片url
public $page_imgurl;
//分页 url-连接路径 fix-页码前缀 urlParam-页码参数 target-框架
public $page_url;
public $page_urlParam;
public $page_target;
public $page_fix;
//摸板替换
private $page_mode_out;
private $page_mode_begin;
private $page_mode_end;
// sum-总页数 view-当前页码 rssum-记录总数 now-当前记录数 limit-限制记录数 number-每页显示的记录数 viewnow-初始化对象的时候跳转到第几页
public $page_sum;
public $page_view;
private $page_viewnow;
public $page_rssum;
public $page_number;
public $page_now;
private $page_limit;
/*
* 构造函数初始化属性
* @param int 当前分页要显示的页
*/
public function __construct($db,$strpage=0)
{
$this->page_url='?';
$this->page_db=$db;
$this->page_ajax=false;
$this->page_fix='page';
$this->page_urlParam='=(page)';
$this->page_target='';
$this->page_sqlmode=0;
$this->page_sqlaction=0;
$this->page_template='1';
$this->page_number=20;
$this->page_space=8;
$this->page_unit='条';
$this->page_tit='记录';
$this->page_sql='';
$this->page_isout=true;
$this->page_viewnow=$strpage;
}
//加载预处理
public function pageLoad($strsum=0)
{
$this->getViewNum();
//分页记录总数
if (!$strsum)
{
$rows=$this->page_db->getRow($this->pageStructureSql($this->page_sql,$this->page_sqlmode,$this->page_sqlaction));
$this->page_rssum=$rows['num'];
}
else
{
$this->page_rssum=$strsum;
}
//分页总页数 [记录总数/每页显示记录数]
if((int)($this->page_rssum%$this->page_number)==0)
{
$this->page_sum=(int)($this->page_rssum/$this->page_number);
if($this->page_sum<1) $this->page_sum=1;
}
else
{
$this->page_sum=(int)($this->page_rssum/$this->page_number)+1;
if($this->page_sum<1) $this->page_sum=1;
}
//当前显示页 [当前页码 > 总页数=总页数]
if($this->page_view>$this->page_sum) $this->page_view=$this->page_sum;
//当前显示页 [当前页码 < 1=1]
if($this->page_view<1)$this->page_view=1;
//当只有一页时 [每页记录数=总记录数]
if($this->page_view==$this->page_sum && $this->page_view==1) $this->page_number=$this->page_rssum;
//分页显示记录 当前已经显示到的记录数
$this->page_now=($this->page_view-1)*$this->page_number;
//分页记录显示限制 [当前已经显示到的记录数 , 每页显示记录数]
$this->page_limit=" limit ".$this->page_now.",".$this->page_number;
//判断是否输出模板
if ($this->page_isout) $this->setTpl();
}
//分页页码图片路径
public function setImgUrl($url)
{
$this->page_imgurl=$url;
}
//获取上一页
public function getPrevNum()
{
return $this->page_view>1? $this->page_view-1 : 1;
}
//获取下一页
public function getNextNum()
{
return $this->page_view<$this->page_sum? $this->page_view+1 : $this->page_sum;
}
//获取第一页
public function getFirstNum()
{
return 1;
}
//获取最后一页
public function getLastNum()
{
return $this->page_sum;
}
//获取当前页
public function getViewNum()
{
return ($this->page_viewnow>0)? $this->page_view=$this->page_viewnow : $this->page_view=$this->pageCode($this->page_fix);
}
/*
* 返回连接url
* @param int 当前显示页
*/
public function pageGetUrl($strpage=1)
{
$this->page_urlParam='=('.$this->page_fix.')';
$tmp_str=$this->page_url.$this->page_fix.$this->page_urlParam;
$tmp_str=str_replace("({$this->page_fix})",$strpage,$tmp_str);
return $tmp_str;
}
/*
* 返回当前显示页
* @param int 当前显示页
*/
private function pageCode($strer)
{
$tmp_num=0;
if($this->page_ajax)
{
$tmp_num=$this->page_view;
}
else
{
if(array_key_exists($strer,$_GET))
{
$tmp_num=@$_GET[$strer];
}
else
{
$tmp_num=$this->page_view;
}
}
if (!is_numeric($tmp_num)) return 1;
if ((int)$tmp_num<1) return 1;
return (int)$tmp_num;
}
//制作下拉框页码
private function pageJump()
{
$temp_select='<select name="select_page" onchange="javascript:window.location.href=this.options[this.selectedIndex].value">';
for ($i=1;$i<=$this->page_sum;$i++)
{
if ($i>$this->page_view)
{
$temp_select.='<option value="'.$this->pageGetUrl($i).($this->page_view==$i ? '" selected ' : '"').">$i</option>";
}
elseif ($i==$this->page_view)
{
$temp_select.='<option value="'.$this->pageGetUrl($i).($this->page_view==$i ? '" selected ' : '"').">$i</option>";
}
else
{
$temp_select.='<option value="'.$this->pageGetUrl($i).($this->page_view==$i ? '" selected ' : '"').">$i</option>";
}
}
$temp_select.='</select>';
return $temp_select;
}
//制作文本框页码 text_page()
private function pageText()
{
if($this->page_ajax)
{
$temp_url=$this->page_url.'page=';
return '<input id="goto_page" type="text" size="3" />';
}
else
{
$temp_url=$this->page_url.'page=';
return '<input id="goto_page" type="text" size="3" onkeypress="javascript:if(event.keyCode==13){var url=\''.$temp_url.'\'+this.value;window.location.href=url;}" />';
}
}
//设置模板
private function setTpl()
{
include './page/'.$this->page_template.'.php';
if(isset($p_mode_out) && !empty($p_mode_out))
{
$this->page_mode_out=$p_mode_out;
}
if(isset($p_mode_b) && !empty($p_mode_b))
{
$this->page_mode_begin=$p_mode_b;
}
if(isset($p_mode_e) && !empty($p_mode_e))
{
$this->page_mode_end=$p_mode_e;
}
}
//返回拼装sql语句
function pageStructureSql($sql,$mode,$action)
{
switch($mode)
{
case 1:
$temp_sql=preg_replace('/\(\s*SELECT\s.*\s+FROM\s/Uis','(SELECT COUNT(*) as num FROM ',$sql);
$temp_sql=str_replace("union","+",$temp_sql);
$temp_sql="select ".$temp_sql;
$temp_sql=substr($temp_sql,0,strrpos($temp_sql,")")+1)." as num";
break;
default:
$temp_sql=preg_replace('/^\s*SELECT\s.*\s+FROM\s/Uis','SELECT COUNT(*) as num FROM ',$sql);
$temp_sql=preg_replace('/(\sORDER\s+BY\s.*)/is','',$temp_sql);
break;
}
switch($action)
{
case 1:
$temp_sql="select count(num) as num from (".$temp_sql.") as test";
break;
}
return $temp_sql;
}
//获得分页数据数组
public function pageGetArray()
{
$temp_query=$this->page_db->query($this->page_sql.$this->page_limit);
$temp_result=$this->page_db->query_array($temp_query);
return $temp_result;
}
//获得分页数据对象
public function pageGetQuery()
{
$temp_query=$this->page_db->query($this->page_sql.$this->page_limit);
return $temp_query;
}
//直接替换模板
public function sqlAssign($para,$fun=0)
{
$temp_query=$this->page_sql.$this->page_limit;
sql_to_assign($temp_query,$para,0,$fun);
}
//分页输出
public function pageOut()
{
//设置数字连接的变量数组
$temp_atyb=array();
//分页连接在目标框架显示
$this->page_target=='' ? '' : $this->page_target=' target='.$this->page_target;
//活动页码范围设置
$temp_range=(int)($this->page_space/2);
if ($temp_range*2!=$this->page_space) $temp_range--;
$pl=$this->page_view-$temp_range;
$pr=$pl+$this->page_space-1;
//$pl 活动页码初始值
if ($pl<1)
{
$pr=$pr-$pl+1;
$pl=1;
if ($pr>$this->page_sum) $pr=$this->page_sum;
}
//$pr 活动页码最终值
if ($pr>$this->page_sum)
{
$pl=$pl+$this->page_sum-$pr;
$pr=$this->page_sum;
if($pl<1) $pl=1;
}
//固定模版替换名数组
$temp_mixd=array(
'{page_rssum}',//总记录数
'{page_unit}',//单位
'{page_tit}',//代词
'{page_sum}',//总页数
'{page_view}',//当前页码
'{page_target}',//分页连接在目标框架显示
'{page_first_link}',//第一页
'{page_prev_link}',//上一页
'{page_next_link}',//下一页
'{page_last_link}',//最后一页
'{page_first_num}',//第一页
'{page_prev_num}',//上一页
'{page_next_num}',//下一页
'{page_last_num}',//最后一页
'{page_text}',//辅助分页
'{page_jump}',//辅助分页
'{page_number}',
'{page_imgurl}',//分页连接图片路径
'{page_aimgurl}',//辅助图片路径
);
//固定模版替换值数组
$temp_mixb=array(
$this->page_rssum,//总记录数
$this->page_unit,//单位
$this->page_tit,//代词
$this->page_sum,//总页数
$this->page_view,//当前页码
$this->page_target,//分页连接在目标框架显示
$this->pageGetUrl(1),//第一页
$this->page_view>1? $this->pageGetUrl($this->page_view-1) : $this->pageGetUrl(1),//上一页
$this->page_view<$this->page_sum? $this->pageGetUrl($this->page_view+1) : $this->pageGetUrl($this->page_sum),//下一页
$this->pageGetUrl($this->page_sum),//最后一页
$this->getFirstNum(),//第一页
$this->getPrevNum(),//上一页
$this->getNextNum(),//下一页
$this->page_sum,//最后一页
$this->pageText(),//辅助分页
$this->pageJump(),//辅助分页
$this->page_number,
$this->page_imgurl,
$this->page_aimgurl
);
//活动模版替换名数组
$temp_atyd=array(
'{page_target}', //分页连接在目标框架显示
'{page_link}', //活动数字连接页码
'{page_number}', //数字或其它页码
'{page_aimgurl}' //辅助图片路径
);
$temp_x=0;
//替换导入模版中的{..}内容
foreach($this->page_mode_out as $key=>$value)
{
$temp_out='';
if($key!=='activity' && $key!=='begin_activity' && $key!=='end_activity')
{
$temp_out=str_replace($temp_mixd,$temp_mixb,$value);
}
else
{
//活动的[字符/图片]页码 替换模版{..}内容
for ($i=$pl;$i<=$pr;$i++)
{
if ($i>$this->page_view)
{
$page_link=$this->pageGetUrl($i);
$temp_atyb=array($this->page_target,$page_link,$i,$this->page_aimgurl);
@$temp_out.=$this->page_mode_begin[$key].str_replace($temp_atyd,$temp_atyb,$value).$this->page_mode_end[$key];
}
elseif ($i==$this->page_view)
{
$tmp_mode=' '.$this->page_mode_begin['static'].'{page_number}'.$this->page_mode_end['static'].' ';
$temp_out.=str_replace('{page_number}',$i,$tmp_mode);
}
else
{
$page_link=$this->pageGetUrl($i);
$temp_atyb=array($this->page_target,$page_link,$i,$this->page_aimgurl);
@$temp_out.=$this->page_mode_begin[$key].str_replace($temp_atyd,$temp_atyb,$value).$this->page_mode_end[$key];
}
}
}
//组织替换后的内容
($temp_x++<1)? $out=$temp_out : $out.=$temp_out;
}
return $out;
}
}
?>