pplboy
(pplboy)
论坛元老
 
资深会员
UID 19800
精华
0
积分 3591
帖子 3626
金钱 3591 喜悦币
威望 0
人脉 0
阅读权限 90
注册 2003-4-22
状态 离线
|
[广告]: 代充Paypal帐号美元
原创的好用分页类第2版 支持Adodb 和mysql函数
这是从我现在框架中提取出来的,补充了对mysql函数的支持, 希望大家喜欢~~~
<?php
/** * FileName: PagerV2.php * Summary: 翻页类 分页输出数据结果的类 * Author: pplboy * CreateTime: 2005-10-01 * LastModifed:2006-06-23 * (c) copyright 2004 [email]support@ds08.net[/email] * 版本信息:v2完成 * 依赖关系:无 * 接收参数: $DB ADODB链接 或者mysql Link 自动判断数据连接类型 $Sql 需要查询的SQL语句 $Fields 排序使用的字段名和显示名 $_GET 当前页的GET数据 $pageSize 初始化当前页的显示条数 返回值
$res['field'] 修饰过的排序字段 $res['result'] 结果集 $res['pageInfo'] 页面信息 $res['pageLink'] 翻页连接
*/ /** * 分页类中查询的输入必定牵扯到一些不应该涉及的地方。为了不导致分页类设计变得复杂,因此应该遵循 * 不要涉及任何与分页和排序有关联的信息处理。要的只是最小化的数据需求 * 类似 子查询和联合查询还有汇总查询,他们涉及的非分页和排序部分应该由使用分页的对象来提供 * 分页使用固定的格式返回查询结果,供使用分页的对象来使用 * * * 分页类v2 目标 * 分页类仅供返回三种有效数据 资源集 翻页导航 排序导航 * 分页类仅接受两种有效数据 查询SQL 翻页指向链接 * * */ /* 使用方法1 使用ADODB连接 <?php require_once("../this_g_inc.php"); $Fields = array("id"=>"ID","name"=>"名字","user_level"=>"用户级别","note"=>"备注","log_time"=>"日志时间"); $Sql = "select * from log"; $res = new PagerV2($DB,$Sql,$Fields,$_GET,4); $res = $res->getCurrentPageRes();
//$tpl->assign("res",$res); //$tpl->display("show.htm");
print_r($res['field']); echo "<hr>"; foreach($res['result'] as $key=>$val) { echo $val[0].$val[1]; echo "<br>"; } echo "<hr>"; print_r($res['pageInfo']); print_r($res['pageLink']);
?> <? 使用方法2 使用mysql连接 $DB = mysql_connect("localhost","root","root"); echo get_class($DB); mysql_select_db("consultation"); $Fields = array("id"=>"ID","name"=>"名字","user_level"=>"用户级别","note"=>"备注","log_time"=>"日志时间"); $Sql = "select * from log"; $res = new PagerV2($DB,$Sql,$Fields,$_GET,4); $res = $res->getCurrentPageRes();
//$tpl->assign("res",$res); //$tpl->display("show.htm");
print_r($res['field']); echo "<hr>"; foreach($res['result'] as $key=>$val) { echo $val[0].$val[1]; echo "<br>"; } echo "<hr>"; print_r($res['pageInfo']); print_r($res['pageLink']); ?>
*/
class PagerV2 { var $DB; var $pageSize; var $sql; var $get; var $midNum; var $fields; var $linkName; var $DBLinkType;
/** * 构造函数 * Pager在构造时应该初始化所有属性,每页显示多少条信息,按照什么方法排序,是否显示跳转, * @param: 数据连接 此为adodb对象 */ function PagerV2(&$db,$sql,$fields,$get,$pageSize = 10,$defOrderField="id") { // adodb连接对象 $this->DB = $db; //检查数据库连接 //if(get_class_name) //$this->linkType = if(get_class($this->DB) == "adodb_mysql") { $this->DBLinkType = "adodb_mysql"; }else{ $this->DBLinkType = "mysql"; } //每页显示条数 $this->pageSize = $pageSize; //查询的sql元语句 $this->sql = $sql; //保存$get值 $this->get = $get; //调整显示页码的参数 $this->midNum = 2; //排序字段的信息 $this->fields = $fields;
//返回信息的内容数组 $this->linkName = array("pg_first"=>"第一页", "pg_prev"=>"上一页", "pg_next"=>"下一页", "pg_last"=>"最后页", "pg_all"=>"总页数", "pg_now"=>"当前页数", "pg_size"=>"每页信息数", "pg_row_num"=>"信息总数", "od_asc"=>"asc", "od_desc"=>"desc");
//默认值列表 //$this->linkName = array("<<","<",">",">>","Page Count :","Now Pager :","One Page Message :","ASC","DESC"); //默认排序字段 $this->defOrderField = $defOrderField; }
/** * 设定页面间导航链接使用的文字或图片 */ function setLinkName($ary) { $this->linkName = $ary ; } /** * 获得当前页面间导航链接使用的文字或图片 * */ function getLinkName() { return $this->linkName ; }
/** * 设定每页显示多少条数据 * */ function setPageSize($num){ $this->pageSize = $num; } /** * 获得每页显示多少条数据 * */ function getPageSize(){ return $this->pageSize; }
/** * 获得上一页的换页链接 * 获得下一页的换页链接 * * * */ function getLinkPagePrev($str) { ;//return $this->makeLink($str,$this->) } /** * 返回当前页面信息集合 * @param: 查询的sql * @param: get的参数数组 * @param: $查询结果的字段名称 */ function getCurrentPageRes($pageNumber = 0) { //1 填充排序和limit值 $this->get['c_orderField'] = ($this->get['c_orderField']=="")? $this->defOrderField : $this->get['c_orderField']; $this->get['c_order'] = ($this->get['c_order']=="")? "asc" : $this->get['c_order']; $this->get['c_start'] = ($this->get['c_start']=="")? "0" : $this->get['c_start']; $this->get['c_pageSize'] = ($this->get['c_pageSize']=="")? $this->pageSize : $this->get['c_pageSize']; $this->get['c_nowPage'] = ($this->get['c_nowPage']=="")? "1" : $this->get['c_nowPage']; //2 搜索默认传入的搜索列 以获得需要的查询的总条数 //判断当前连接的形式 获取查询数据条数 if($this->DBLinkType=="mysql") { $myquery = mysql_query($this->sql,$this->DB); $rowNum = mysql_num_rows($myquery); }elseif($this->DBLinkType=="adodb_mysql"){ $resAll = $this->DB->execute($this->sql); $rowNum = $resAll->RecordCount(); }else{ echo "error link"; exit(); } if($rowNum!=0) { $pg_row_num = $rowNum; //3 根据传入的排序和limit信息 生成 $page信息 $pg_num = ceil( $pg_row_num / $this->get['c_pageSize']); //总页数 $pg_now = ($this->get['c_start'] / $this->get['c_pageSize']) + 1; //当前页 $pg_row_now = ($pg_now -1)*$this->get['c_pageSize']; //当前页的开始行数 $pg_row_first = 0; //起始页的开始行数 $pg_row_prev = $this->get['c_start']-$this->get['c_pageSize']; //上一页的开始行数 $pg_row_next = $this->get['c_start']+$this->get['c_pageSize']; //下一页的开始行数 $pg_row_last = ($pg_num-1) *$this->get['c_pageSize']; //最后页的开始行数 /***生成链接***/ $this->get['c_start'] = $pg_row_first; $pg_first = $this->makeLink("pg_first");
$this->get['c_start'] = $pg_row_last; $pg_last = $this->makeLink("pg_last"); $pg_mid_num = $this->midNum; //调整显示页码的参数 //用于生成 数码转向页 for($i=($pg_now-$pg_mid_num);$i<=($pg_now+$pg_mid_num);$i++) { if($i==$pg_now) { $this->get['c_start'] = $this->get['c_pageSize']*($i-1); $mid_temp = $this->makeLink("<b>$i</b>"); $pg_mid .= " ".$mid_temp; } elseif($i>=1&&$i<($pg_num - $pg_mid_num)) { //$pg_mid_start = "..."; $pg_mid_end = "..."; $this->get['c_start'] = $this->get['c_pageSize']*($i-1); $mid_temp = $this->makeLink($i); $pg_mid .= " ".$mid_temp; } elseif($i>=1&&$i<=$pg_num) { $this->get['c_start'] = $this->get['c_pageSize']*($i-1); $mid_temp = $this->makeLink($i); $pg_mid .= " ".$mid_temp; } } //如果当前页超过了第一页 上一页链接为空 if($pg_now > 1) { $this->get['c_start'] = $pg_row_prev; $pg_prev = $this->makeLink("pg_prev"); } else { ; } //如果当下一页超过了最后页 下一页链接为空 if($pg_now < $pg_num) { $this->get['c_start'] = $pg_row_next; $pg_next = $this->makeLink("pg_next"); } else { ; }
/****结束生成链接***/ $pg_info = $this->linkName["pg_all"]." ".$pg_num." "; $pg_info .= $this->linkName["pg_now"]." ".$pg_now." "; $pg_info .= $this->linkName["pg_size"]." ".$this->get['c_pageSize']." "; $pg_info .= $this->linkName["pg_row_num"]." ".$pg_row_num." "; $res['pageInfo'] = $pg_info;
//3 返回值数组其中之一page参数 // 参数格式 第一页 上一页 中间页 下一页 最后页 总页数 当前页数 每页信息数 $res['pageLink'] = $pg_first." ".$pg_prev." ".$pg_mid_start." ".$pg_mid." ".$pg_mid_end." ".$pg_next." ".$pg_last; //4 根据传入的排序和limit信息 生成 结果数组
$sql =$this->sql." order by ".$this->get['c_orderField']." ".$this->get['c_order']." limit ".$pg_row_now.",".$this->get['c_pageSize']." "; if($this->DBLinkType=="mysql") { $myquery = mysql_query($sql,$this->DB); while($myarray = mysql_fetch_array($myquery)) { $res['result'][] = $myarray; } }elseif($this->DBLinkType=="adodb_mysql"){ $rs = $this->DB->execute($sql); $res['result'] = $rs->GetArray(); }else{ echo "error link"; exit(); }
//5 根据传入的排序列 生成排序修饰符。 $this->get['c_start'] = $pg_row_now; $nowOrderField = $this->get['c_orderField']; $nowOrder = $this->get['c_order'];
foreach($this->fields as $key=>$val) { // echo $this->get['c_orderField']; if($key == $nowOrderField) { //如果提交的变量=数组中的变量名 if($nowOrder=="desc") { $this->get['c_orderField'] = $key; $this->get['c_order'] = "asc"; $field[$key] = $this->makeLink($val); }elseif($nowOrder=="asc"){ $this->get['c_orderField'] = $key; $this->get['c_order'] = "desc"; $field[$key] = $this->makeLink($val); } }else{ //如果提交的变量!=数组中的变量名 $this->get['c_orderField'] = $key; $this->get['c_order'] = "asc"; //echo "*"; $field[$key] = $this->makeLink($val); } }
$res['field'] = $field; return $res ; }else{ return $res = 0 ; } } /** * 产生链接 * $linkTag 链接的名字 */ function makeLink($linkTag = NULL) { $link = "<a href=\"".$_SERVER['PHP_SELF']."?"; foreach($this->get as $key=>$val) { $link .= $key."=".$val."&"; } //echo $link; if(is_null($this->linkName[$linkTag])) { $linkFont = $linkTag;//$this->linkName[$linkTag] = } else { $linkFont = $this->linkName[$linkTag]; } $link .="\">".$linkFont."</a>"; return $link; } } ?>
|
|