.::: 一路问情 :::.
  • 注册
  • 登录
  • 会员
  • 生存游戏
  • FTP资源中心
  • 七海争霸
  • 社区设施
  • 帮助
.::: 一路问情 :::. » 『建站技术』 » 一个分页显示类
‹‹ 上一主题 | 下一主题 ››
发新话题
  • 发新话题
  • 发布投票
  • 发布商品
  • 发布悬赏
  • 发布活动
  • 发布辩论
  • 发布视频
打印

[程序] 一个分页显示类

ivanisme
看贴不回的后果

初级会员

帖子
83 
威望
30 点 
金钱
201 元 
好评
0 点 
  • 个人空间
  • 发短消息
  • 加为好友
  • 当前离线
1楼 大 中 小 发表于 2008-2-26 17:00  只看该作者

一个分页显示类

<?php
/*
* 分页显示类
* PageItem.php v 1.0.0
* 编程:Boban<boban@21php.com>
* 讨论:http://www.21php.com/forums/
* 更新:2004-02-02
* 说明:
* 1. 配合MYSQL数据库使用
* 2. 类没有提供连接数据库的功能,需在外部建立数据库连接。
* */
/*
* 使用方法:
* $sql = "select * from news limit 0,10";
* $hdc = new PageItem($sql);
* echo $hdc->myPageItem();
* $arrRecords = $hdc->ReadList();
* */
if (!defined("__PAGEITEM__")) {
    define("__PAGEITEM__", 1);
} else {
    exit(3);
}

class PageItem {
    var $iDefaultRecords = 10; // 默认每页显示记录数,如果没有设置,就使用默认值
    var $iMaxRecord; //每页记录数
    var $iTotal; //记录总数
    var $sqlRecord; // 获取记录的SQL查询
    var $iPages; //总页数
    var $CPages; //当前页数
    /*
  * 构造函数 -- 初始化变量
  * 参数:SQL查询语句,将忽略LIMIT语句
  * */

    function PageItem($sql = "")
    {
        // register_shutdown_function($this->_PageItem());
        $this->SetMaxRecord($this->iDefaultRecords);
        /*
       * 解析SQL语句
       * */
        if ($sql <> "") {
            list($sql) = spliti("LIMIT", $sql); // 去除LIMIT语句
            $this->sqlRecord = trim($sql);
            list(, $sql) = spliti("FROM", $sql);
            $sql = trim($sql);
   if(preg_match ("/\bGROUP\b \bBY\b/i", $sql))
   {
    //echo "HAVE GROUP BY";
    if(preg_match ("/\bHAVING\b/i", $sql)) list(,$field) = spliti("HAVING",$sql);
    list($field) = spliti(' ',trim($field));
    //echo $field;
    $this->iTotal = $this->CountRecord("SELECT $field,COUNT(DISTINCT $field) AS cnt FROM " . $sql,2);
   }
   else $this->iTotal = $this->CountRecord("SELECT COUNT(*) AS cnt FROM " . $sql,1);
        }
        $this->iPages = ceil($this->iTotal / $this->iMaxRecord);
        $this->CPages = $_REQUEST['page'];
        if ($this->CPages <= 0) $this->CPages = 1;
        if ($this->CPages > $this->iPages) $this->CPages = $this->iPages;
        //echo "SELECT COUNT(*) AS cnt FROM " . $sql;
  //echo $this->iTotal;
    }
    /*
     * 析构函数 -- 暂时不可用
     * */
    function _PageItem()
    {
        // $this->linkid = NULL;
    }

    function SetMaxRecord($cnt)
    {
        $this->iMaxRecord = $cnt;
    }

    /*
     * 统计匹配的记录总数
     * */
    function CountRecord($sql,$type)
    {
  //echo $sql;
  if($type == 1)
  {
   if (($records = mysql_query($sql)) && ($record = mysql_fetch_assoc($records))) {
    return $record['cnt'];
   } else return 0;
  }
  elseif($type == 2)
  {
   if($records = mysql_query($sql))
    return mysql_affected_rows();
  }
    }
/*
  * 读取记录
  * */
function ReadList()
{
  $ret = array();
  $this->sqlRecord.=" LIMIT ".($this->CPages-1)*$this->iMaxRecord.",".$this->iMaxRecord;
  $records = mysql_query($this->sqlRecord);
  if(!$records) return;
  while($record = mysql_fetch_array($records))
  {
   $ret[] = $record;
  }
  return $ret;
}

    function LinktoPage($page, $msg)
    {
        $link = $this->PageUrl($page);
        return "<A href=\"$link\">$msg</A>\n";
    }
    function PageUrl($page)
    {
        $phpself = "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
        $querystring = $_SERVER['QUERY_STRING'];
        $querystring = preg_replace("/page=[0-9]*&?/i", "", $querystring);
        $link = $phpself . "?page=$page&" . $querystring;
        return $link;
    }

    /*
  * 显示当前页及总页数  
  * */
    function PageNav()
    {
        echo "第" . $this->CPages . "页/共" . $this->iPages . "页";
    }

    /*
   * 显示翻页按钮,包括首页、下页、上页、未页
   * */

    function PageButton()
    {
        if ($this->CPages > 1) {
            echo $this->LinktoPage(1, "首页");
            echo " | ";
            echo $this->LinktoPage($this->CPages-1, "上一页");
        } else {
            echo "首页 | 上一页";
        }

        if ($this->CPages < $this->iPages) {
            echo " | ";
            echo $this->LinktoPage($this->CPages + 1, "下一页");
            echo " | ";
            echo $this->LinktoPage($this->iPages, "首页");
        } else {
            echo " | 下一页 | 尾页";
        }
    }
    /*
   * 显示跳转页选择框
   * */

    function SelectItem()
    {
        echo "跳到第<SELECT name='topage' size='1' onchange='window.location=this.value'>\n";
        for($i = 1;$i <= $this->iPages;$i++) {
            if ($this->CPages == $i)
                $extra = "selected";
            else
                $extra = "";
            echo "<OPTION VALUE='" . $this->PageUrl($i) . "' $extra>$i</OPTION>";
        }
        echo "</SELECT>\n";
    }

    /*
     * 一次性显示所有按钮组件
     * */
    function myPageItem()
    {
        $this->PageButton();
        $this->SelectItem();
        $this->PageNav();
    }
} // 类结束

?>



QQ
UID
73836 
精华
0 
积分
30 
钻石
0 克拉 
宣传
0 点 
来路
搜索引擎 
阅读权限
10 
来自
上海 
在线时间
0 小时 
注册时间
2008-2-25 
最后登录
2008-2-26 

查看详细资料

TOP

‹‹ 上一主题 | 下一主题 ››
发新话题
 

 

当前时区 GMT+8, 现在时间是 2008-7-24 05:52 蜀ICP备08000616号

清除 Cookies - 联系我们 - Ask Love - Archiver - WAP - TOP - 界面风格

  • YUYU_Emera-x

Powered by Discuz! 6.0.0,

Processed in 0.029121 second(s), 5 queries, Gzip enabled.

  • 控制面板首页
  • 编辑个人资料
  • 积分交易
  • 积分记录
  • 公众用户组
  • 个人空间管理
  • 资源中心
  • 名人堂
  • 社区银行
  • 醒目高亮
  • 勋章中心
  • 空间互踩
  • 便民查询
  • 邮箱图标
一路问情友情提示你:单帖回复不可以三帖连续哦!