高分求一个Mysql数据库的分页类

谢谢了
---------------------------------------------------------------

这个是我见过的最好的分页类

1   
2/**   
3* 一个用于Mysql数据库的分页类   
4*   
5* @author Avenger

<[email protected]>

  • @version 1.0
  • @lastupdate 2003-04-08 11:11:33
  • 使用实例:
  • $p = new show_page; //建立新对像
  • $p-&gt;file="ttt.php"; //设置文件名,默认为当前页
  • $p-&gt;pvar="pagecount"; //设置页面传递的参数,默认为p
  • $p-&gt;setvar(array("a" =&gt; '1', "b" =&gt; '2')); //设置要传递的参数,要注意的是此函数必须要在 set 前使用,否则变量传不过去
  • $p-&gt;set(20,2000,1); //设置相关参数,共三个,分别为'页面大小'、'总记录数'、'当前页(如果为空则自动读取GET变量)'
  • $p-&gt;output(0); //输出,为0时直接输出,否则返回一个字符串
  • echo $p-&gt;limit(); //输出Limit子句。在sql语句中用法为 "SELECT * FROM TABLE LIMIT {$p-&gt;limit()}";

*/

class show_page {

/**

  • 页面输出结果
  • @var string
    */
    var $output;

/**

  • 使用该类的文件,默认为 PHP_SELF
  • @var string
    */
    var $file;

/**

  • 页数传递变量,默认为 'p'
  • @var string
    */
    var $pvar = "p";

/**

  • 页面大小
  • @var integer
    */
    var $psize;

/**

  • 当前页面
  • @var ingeger
    */
    var $curr;

/**

  • 要传递的变量数组
  • @var array
    */
    var $varstr;

/**

  • 总页数
  • @var integer
    */
    var $tpage;

/**

  • 分页设置
  • @access public
  • @param int $pagesize 页面大小
  • @param int $total 总记录数
  • @param int $current 当前页数,默认会自动读取
  • @return void
    */
    function set($pagesize=20,$total,$current=false) {
    global $HTTP_SERVER_VARS,$HTTP_GET_VARS;

$this-&gt;tpage = ceil($total/$pagesize);
if (!$current) {$current = $HTTP_GET_VARS[$this-&gt;pvar];}
if ($current&gt;$this-&gt;tpage) {$current = $this-&gt;tpage;}
if ($current&lt;1) {$current = 1;}

$this-&gt;curr = $current;
$this-&gt;psize = $pagesize;

if (!$this-&gt;file) {$this-&gt;file = $HTTP_SERVER_VARS['PHP_SELF'];}

if ($this-&gt;tpage &gt; 1) {

if ($current&gt;10) {
$this-&gt;output.='<a ?'.$this-="" href=".$this-&gt;file.">pvar.'='.($current-10).($this-&gt;varstr).' title="前十页"&gt;&lt;&lt;&lt;</a> ';
}
if ($current&gt;1) {
$this-&gt;output.='<a ?'.$this-="" href=".$this-&gt;file.">pvar.'='.($current-1).($this-&gt;varstr).' title="前一页"&gt;&lt;&lt;</a> ';
}

$start = floor($current/10)*10;
$end = $start+9;

if ($start&lt;1) {$start=1;}
if ($end&gt;$this-&gt;tpage) {$end=$this-&gt;tpage;}

for ($i=$start; $i&lt;=$end; $i++) {
if ($current==$i) {
$this-&gt;output.='<font color="red">'.$i.'</font> '; //输出当前页数
} else {
$this-&gt;output.='<a href="'.$this-&gt;file.'?'.$this-&gt;pvar.'='.$i.$this-&gt;varstr.'">['.$i.']</a> '; //输出页数
}
}

if ($current&lt;$this-&gt;tpage) {
$this-&gt;output.='<a ?'.$this-="" href=".$this-&gt;file.">pvar.'='.($current+1).($this-&gt;varstr).' title="下一页"&gt;&gt;&gt;</a> ';
}
if ($this-&gt;tpage&gt;10 &amp;&amp; ($this-&gt;tpage-$current)&gt;=10 ) {
$this-&gt;output.='<a ?'.$this-="" href=".$this-&gt;file.">pvar.'='.($current+10).($this-&gt;varstr).' title="下十页"&gt;&gt;&gt;&gt;</a>';
}
}
}

/**

  • 要传递的变量设置
  • @access public
  • @param array $data 要传递的变量,用数组来表示,参见上面的例子
  • @return void
    */
    function setvar($data) {
    foreach ($data as $k=&gt;$v) {
    $this-&gt;varstr.='&amp;'.$k.'='.urlencode($v);
    }
    }

/**

  • 分页结果输出
  • @access public
  • @param bool $return 为真时返回一个字符串,否则直接输出,默认直接输出
  • @return string
    */
    function output($return = false) {
    if ($return) {
    return $this-&gt;output;
    } else {
    echo $this-&gt;output;
    }
    }

/**

  • 生成Limit语句
  • @access public
  • @return string
    /
    function limit() {
    return (($this-&gt;curr-1)
    $this-&gt;psize).','.$this-&gt;psize;
    }

} //End Class

Published At
Categories with Web编程
Tagged with
comments powered by Disqus