我推荐一个:
不是我写的,不过经常用:
/**
|+--------------------------------------------------------
| 分页控制函数(PHPLIB)
|+--------------------------------------------------------
| 函数名:PageLink($total_num, $onepage)
| 作用:
| 参数:
| @参数1:说明
| @参数2:说明
| @参数3:说明
| 返回值:(类型等)
| 使用例子:
| PageLink($total_num, $onepage);//在程序中
| {pagelink} //在模板中
|+--------------------------------------------------------
**/
function PageLink($total_num, $onepage){
global $t, $pagecount;
$t->set_file("pagelink", "pagelink.htm");
$totalpage=ceil($total_num/$onepage);
$minpage=$pagecount-4;
if ($minpage<1){
$minpage=1;
}
$maxpage=$minpage+8;
if ($maxpage>$totalpage){
$maxpage=$totalpage;
$minpage=$maxpage-8;
if ($minpage<1){
$minpage=1;
}
}
//页码组 if($totalpage==0) $t->set_var("pages", "1");
else{
$t->set_block("pagelink", "prow", "prows");
for($i=$minpage; $i<=$maxpage; $i++){
$t->set_var("pages", "<a href='$PHP_SELF?pagecount=$i'>".$i."</a> ");
if ($i==$pagecount){
$t->set_var("pages", "<b>".$i."</b> ");
}
$t->parse("prows", "prow", true);
}
}
//表单跳转
$t->set_block("pagelink", "pjrow", "pjrows");
for($j=1; $j<=$totalpage; $j++){
$t->set_var("pagejump", "<option value='$PHP_SELF?pagecount=$j' >".$j."</option>");
if ($j==$pagecount){
$t->set_var("pagejump", "<option value='$PHP_SELF?pagecount=$j' selected>".$j."</option>");
}
$t->parse("pjrows", "pjrow", true);
}
//上一页
if ($pagecount>1){
$prepagecount=$pagecount-1;
$t->set_var("pre", "<a href='$PHP_SELF?pagecount=$prepagecount'class=\"F15A22_0099FF\">[上一页]</a>");
}else{
$t->set_var("pre", "[上一页]");
}
//下一页
if ($pagecount<$totalpage){
$nextpagecount=$pagecount+1;
$t->set_var("next", "<a href='$PHP_SELF?pagecount=$nextpagecount'class=\"F15A22_0099FF\">[下一页]</a>");
}else{
$t->set_var("next", "[下一页]");
} //上一组
if ($minpage>9){
$pgpagecount=$minpage-5;
$t->set_var("pg", "<a href='$PHP_SELF?pagecount=$pgpagecount'>上一组</a>");
}else{
$t->set_var("pg", "");
}
//下一组
if ($totalpage>$maxpage+9){
$ngpagecount=$maxpage+5;
$t->set_var("ng", "<a href='$PHP_SELF?pagecount=$ngpagecount'>下一组</a>");
}else{
$t->set_var("ng", "");
}
//第一页
$t->set_var("first", "<a href='$PHP_SELF?pagecount=1'class=\"F15A22_0099FF\">[第一页]</a>");
//最末页
$t->set_var("max", "<a href='$PHP_SELF?pagecount=$totalpage'class=\"F15A22_0099FF\">[最末页]</a>");
$t->parse("pagelinks", "pagelink");
}
不是我写的,不过经常用:
/**
|+--------------------------------------------------------
| 分页控制函数(PHPLIB)
|+--------------------------------------------------------
| 函数名:PageLink($total_num, $onepage)
| 作用:
| 参数:
| @参数1:说明
| @参数2:说明
| @参数3:说明
| 返回值:(类型等)
| 使用例子:
| PageLink($total_num, $onepage);//在程序中
| {pagelink} //在模板中
|+--------------------------------------------------------
**/
function PageLink($total_num, $onepage){
global $t, $pagecount;
$t->set_file("pagelink", "pagelink.htm");
$totalpage=ceil($total_num/$onepage);
$minpage=$pagecount-4;
if ($minpage<1){
$minpage=1;
}
$maxpage=$minpage+8;
if ($maxpage>$totalpage){
$maxpage=$totalpage;
$minpage=$maxpage-8;
if ($minpage<1){
$minpage=1;
}
}
//页码组 if($totalpage==0) $t->set_var("pages", "1");
else{
$t->set_block("pagelink", "prow", "prows");
for($i=$minpage; $i<=$maxpage; $i++){
$t->set_var("pages", "<a href='$PHP_SELF?pagecount=$i'>".$i."</a> ");
if ($i==$pagecount){
$t->set_var("pages", "<b>".$i."</b> ");
}
$t->parse("prows", "prow", true);
}
}
//表单跳转
$t->set_block("pagelink", "pjrow", "pjrows");
for($j=1; $j<=$totalpage; $j++){
$t->set_var("pagejump", "<option value='$PHP_SELF?pagecount=$j' >".$j."</option>");
if ($j==$pagecount){
$t->set_var("pagejump", "<option value='$PHP_SELF?pagecount=$j' selected>".$j."</option>");
}
$t->parse("pjrows", "pjrow", true);
}
//上一页
if ($pagecount>1){
$prepagecount=$pagecount-1;
$t->set_var("pre", "<a href='$PHP_SELF?pagecount=$prepagecount'class=\"F15A22_0099FF\">[上一页]</a>");
}else{
$t->set_var("pre", "[上一页]");
}
//下一页
if ($pagecount<$totalpage){
$nextpagecount=$pagecount+1;
$t->set_var("next", "<a href='$PHP_SELF?pagecount=$nextpagecount'class=\"F15A22_0099FF\">[下一页]</a>");
}else{
$t->set_var("next", "[下一页]");
} //上一组
if ($minpage>9){
$pgpagecount=$minpage-5;
$t->set_var("pg", "<a href='$PHP_SELF?pagecount=$pgpagecount'>上一组</a>");
}else{
$t->set_var("pg", "");
}
//下一组
if ($totalpage>$maxpage+9){
$ngpagecount=$maxpage+5;
$t->set_var("ng", "<a href='$PHP_SELF?pagecount=$ngpagecount'>下一组</a>");
}else{
$t->set_var("ng", "");
}
//第一页
$t->set_var("first", "<a href='$PHP_SELF?pagecount=1'class=\"F15A22_0099FF\">[第一页]</a>");
//最末页
$t->set_var("max", "<a href='$PHP_SELF?pagecount=$totalpage'class=\"F15A22_0099FF\">[最末页]</a>");
$t->parse("pagelinks", "pagelink");
}
<?php
/**
* 一个用于Mysql数据库的分页类
*
* @author Avenger <[email protected]>
* @version 1.0
* @lastupdate 2003-04-08 11:11:33
*
*
* 使用实例:
* $p = new show_page; //建立新对像
* $p->file="ttt.php"; //设置文件名,默认为当前页
* $p->pvar="pagecount"; //设置页面传递的参数,默认为p
* $p->setvar(array("a" => '1', "b" => '2')); //设置要传递的参数,要注意的是此函数必须要在 set 前使用,否则变量传不过去
* $p->set(20,2000,1); //设置相关参数,共三个,分别为'页面大小'、'总记录数'、'当前页(如果为空则自动读取GET变量)'
* $p->output(0); //输出,为0时直接输出,否则返回一个字符串
* echo $p->limit(); //输出Limit子句。在sql语句中用法为 "SELECT * FROM TABLE LIMIT {$p->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->tpage = ceil($total/$pagesize);
if (!$current) {$current = $HTTP_GET_VARS[$this->pvar];}
if ($current>$this->tpage) {$current = $this->tpage;}
if ($current<1) {$current = 1;} $this->curr = $current;
$this->psize = $pagesize; if (!$this->file) {$this->file = $HTTP_SERVER_VARS['PHP_SELF'];} if ($this->tpage > 1) {
if ($current>10) {
$this->output.='<a href='.$this->file.'?'.$this->pvar.'='.($current-10).($this->varstr).' title="前十页"><<<</a> ';
}
if ($current>1) {
$this->output.='<a href='.$this->file.'?'.$this->pvar.'='.($current-1).($this->varstr).' title="前一页"><<</a> ';
} $start = floor($current/10)*10;
$end = $start+9; if ($start<1) {$start=1;}
if ($end>$this->tpage) {$end=$this->tpage;} for ($i=$start; $i<=$end; $i++) {
if ($current==$i) {
$this->output.='<font color="red">'.$i.'</font> '; //输出当前页数
} else {
$this->output.='<a href="'.$this->file.'?'.$this->pvar.'='.$i.$this->varstr.'">['.$i.']</a> '; //输出页数
}
} if ($current<$this->tpage) {
$this->output.='<a href='.$this->file.'?'.$this->pvar.'='.($current+1).($this->varstr).' title="下一页">>></a> ';
}
if ($this->tpage>10 && ($this->tpage-$current)>=10 ) {
$this->output.='<a href='.$this->file.'?'.$this->pvar.'='.($current+10).($this->varstr).' title="下十页">>>></a>';
}
}
} /**
* 要传递的变量设置
*
* @access public
* @param array $data 要传递的变量,用数组来表示,参见上面的例子
* @return void
*/
function setvar($data) {
foreach ($data as $k=>$v) {
$this->varstr.='&'.$k.'='.urlencode($v);
}
} /**
* 分页结果输出
*
* @access public
* @param bool $return 为真时返回一个字符串,否则直接输出,默认直接输出
* @return string
*/
function output($return = false) {
if ($return) {
return $this->output;
} else {
echo $this->output;
}
} /**
* 生成Limit语句
*
* @access public
* @return string
*/
function limit() {
return (($this->curr-1)*$this->psize).','.$this->psize;
}} //End Class
?>
<?
/*分页显示*/class pages {
var $sql; //SQL语句
var $offset; //每页显示记录数
var $pageStart; //开始记录数
var $page; //当前页数
var $URL; //URL 地址
var $firstPage; //首页
var $previousPage; //上一页
var $nextPage; //下一页
var $endPage; //尾页 function pages($theSQL, $theURL, $pageNum){
global $_GET;
$this->sql = $theSQL;
$this->offset = $pageNum;
$this->URL = $theURL;
$this->page = $_GET['page'];
if($this->page==""||$this->page<=1){
$this->pageStart=0;
$this->page=1;
}elseif($this->page >= $this->allPageNum()){
$this->pageStart=($this->allPageNum()-1)*$this->offset;
$this->page=$this->allPageNum();
}else{
$this->pageStart=($this->page-1)*$this->offset;
}
} //查询记录总数
function recordCount(){
global $DB;
$DB->query($this->sql);
return $DB->get_num_rows();
} //总页数
function allPageNum(){
return ceil($this->recordCount()/$this->offset);
} //输出的SQL语句
function pageSQL(){
return $this->sql." LIMIT ".$this->pageStart.",".$this->offset;
} //分页左信息
function pageLeft(){
if($this->page==$this->allPageNum()){
$ThisRecord=$this->recordCount();
}else{
$ThisRecord=$this->pageStart+$this->offset;
}
$pageLeft = '共 '.$this->recordCount().' 条信息,当前显示第 '.($this->pageStart+1).' - '.$ThisRecord.' 条,共 '.$this->allPageNum().' 页';
return $pageLeft;
} //分页右信息
function pageRight(){
//以10页为一大页时当前大页数
$pageCount=floor($this->page/10);
if(($this->allPageNum()-($pageCount+1)*10) < 10){
$maxi = $pageCount*10 + ($this->allPageNum() - $pageCount*10);
}else{
$maxi = $pageCount*10 + 10;
}
//生成分页代码
$numPageString = ""; //首页及前10页
if($pageCount > 0){
$numPageString = '<FONT face="Webdings" COLOR=""><A HREF="'.$this->URL.'&page=1" title="首页">9</A></FONT> <FONT face="Webdings" COLOR=""><A HREF="'.$this->URL.'&page='.($this->page-10).'" title="前10页">7</A></FONT>';
}
//数字分页
for($i = $pageCount*10+1; $i <= $maxi; $i++){
if($i == $this->page){
$numPageString.= ' '.$i;
}else{
$numPageString.= ' <A HREF="'.$this->URL.'&page='.$i.'">'.$i.'</A>';
}
}
//后10页及尾页
if($pageCount < floor($this->allPageNum()/10)){
$numPageString = ' <FONT face="Webdings" COLOR=""><A HREF="'.$this->URL.'&page='.($this->page+10).'" title="后10页">8</A></FONT> <FONT face="Webdings" COLOR=""><A HREF="'.$this->URL.'&page='.$this->allPageNum().'" title="尾页">:</A></FONT>';
}
return $numPageString;
}
}
?>