喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
     
标题: 原创的好用分页类第2版 支持Adodb 和mysql函数  
 
pplboy (pplboy)
论坛元老
Rank: 8Rank: 8
资深会员



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 ;
        }
    }
    
    
/**
     * 产生链接
     * $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;
    }
    
}
?>
2006-6-24 08:28 PM#1
查看资料  发短消息  QQ  顶部
 
蟋蟀
版主
Rank: 7Rank: 7Rank: 7
村里巡逻队长


UID 67242
精华 0
积分 2036
帖子 1763
金钱 2036 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2005-12-17
来自 福建
状态 在线
[广告]: 代充Paypal帐号美元
两个太阳的露头,咱顶一下.



吉林php群
27089230
2006-6-24 08:40 PM#2
查看资料  Blog  发短消息  QQ  顶部
 
fly512 (我本如是)
版主
Rank: 7Rank: 7Rank: 7
人生的另一半


UID 42566
精华 0
积分 2489
帖子 2373
金钱 1759 喜悦币
威望 0
人脉 730
阅读权限 100
注册 2004-10-31
来自 亚特兰迪斯
状态 离线
[推荐阅读] 极限科技招聘信息php软件开发工程师
瞧一瞧


看一看




不要使用数据库
PHP中国
2006-6-25 08:35 AM#3
查看资料  访问主页  Blog  发短消息  顶部
 
phpyahoo
新手上路
Rank: 1
初级会员



UID 64959
精华 0
积分 49
帖子 54
金钱 49 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-6-24
状态 离线
[推荐阅读] 有没有假期想找个工作干的
收藏阅读,顶起
2006-6-26 10:41 AM#4
查看资料  发短消息  顶部
 
php5
金牌会员
Rank: 6Rank: 6
中级会员


UID 62897
精华 0
积分 1252
帖子 1100
金钱 1252 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2005-1-3
来自 福建
状态 在线
[推荐阅读] 发邮件类,不需要配置PHP.INI(PHPWIND中分离且改造)
产生链接 的这块能不能让他自动分析 $_POST、$_COOKIE、$_GET ,不然这块太麻烦了
2006-6-26 10:56 AM#5
查看资料  发短消息  顶部
 
sq1228
中级会员
Rank: 3Rank: 3
一般会员


UID 66008
精华 0
积分 267
帖子 239
金钱 267 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-8-19
来自 浙江宁波
状态 离线
[推荐阅读] 关于村里的一些问题!
支持原创!
2006-6-26 11:15 AM#6
查看资料  发短消息  QQ  顶部
 
游戏人间
版主
Rank: 7Rank: 7Rank: 7
☞风云山庄大少爷☜


UID 62639
精华 2
积分 14538
帖子 7531
金钱 14389 喜悦币
威望 20
人脉 129
阅读权限 100
注册 2004-12-21
来自 广西人在北京
状态 离线
[推荐阅读] 为goto正名[转贴]
Adodb這東西好用嗎?
學了幾天PHP了,不知道Adodb到底能用在哪里~!一直都是在用mysql數據庫。




 
群号:6025396/6025252/19520091(广西PHP交流/PHP高级编程/算法交流) 寧可在嘗試中失敗,也不在保守中成功! 不為失敗找理由,只為成功找方法! 饿踢Blog
 
2006-6-26 11:42 AM#7
查看资料  访问主页  Blog  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.088592 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP