Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18673399
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类:

2008-05-29 21:56:13

以下为引用的内容:

* 说明:
* 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 "$msg\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 "跳到第\n";
    }
    /*
     * 一次性显示所有按钮组件
     * */
    function myPageItem()
    {
        $this->PageButton();
        $this->SelectItem();
        $this->PageNav();
    }
} // 类结束
?>

阅读(308) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~