PHP分页的类 <?php /* +-----------------------------------------------------------------------------------------------------+ | filename : pp.php | | ----------------------- | | create date : 2006-12-20 | | version : NO.1.0 | | author : -①℃冰洁/昌! <network021@163.com> | | last update : 2006-12-20 | | remark : PHP分页的类,只需设定记录总数$number 的值,直接调用 $PP | | 返回的值(字符串即可) | +-----------------------------------------------------------------------------------------------------+ */
class showPage { /* * 每页显示记录类 * @var integer */ var $psize = 10;
/* * 页码偏移量 * @var integer */ var $pernum = 5;
/* * 要传递的变量数组 * @var string */ var $varstr = '';
/* * 总页数 * @var integer */ var $tpage = 0;
/* * 记录组总数 * @var integer */ var $pers = 0;
/* * SQL server 分页支点 * @var integer */ var $sid = 0;
/* * 当前页码 * @var integer */ var $page = 0;
/* * MySQL分页生成语句 * @var string */ var $limit = '';
/* * 取得传递变量精数组,并检测它是否为空 * @return v */ function get() { foreach($_GET as $k => $v) { $i++; $str = ($i==1) ? '?' : '&'; $this->varstr = ($k<>'page') ? $this->varstr.$str.$k.'='.$v : $this->varstr; } $this->varstr = $this->varstr ? $this->varstr.'&' : '?'; $this->page = $_GET['page'] ? $_GET['page'] : 1;
// 用于 SQL server 分页记录读取值 // $this->sid = ($this->page-1)*$this->psize;
// 用于 MySQL 分页生成语句 // $this->limit = ($this->page -1)*$this->psize.','.$this->psize; }
/* * 统计页码数 */ function total($number) { $this->tpage = ceil($number / $this->psize); $this->pers = ceil($this->tpage / $this->pernum); }
/* * 分类函数PP(parse page ),$page为当页数 * $number 为记录总数, $psize 为每页显示数目 * @return string */ function PP($number=0 ,$psize=0) { $this->psize = $psize ? $psize : $this->psize;; $this->get(); $this->total($number);
$setpage = $this->page ? ceil($this->page/$this->pernum) : 1; $pagenum = ($this->tpage > $this->pernum) ? $this->pernum : $this->tpage; if ($number <= $this->psize) { $text = '只有一页'; } else { $text = '共 ( '.$this->tpage.' 页 ) : '; if ($this->page > 1) { $text .= '<a title=第一页 href='.$this->varstr.'page=1>[1]</a>...'; } if ($setpage > 1) { $lastsetid = ($setpage-1)*$this->pernum; $text .= '<a title=上一列 href='.$this->varstr.'page='.$lastsetid.'>[<<]</a>'; } if ($this->page > 1) { $pre = $this->page-1; $text .= '<a title=上一页 href='.$this->varstr.'page='.$pre.'>[<]</a>'; } $i = ($setpage-1)*$this->pernum; for($j=$i; $j<($i+$pagenum) && $j<$this->tpage; $j++) { $newpage = $j+1; if ($this->page == $j+1) { $text .= '<b>['.($j+1).']</b>'; } else { $text .= '<a href='.$this->varstr.'page='.$newpage.'>['.($j+1).']</a>'; } } if ($this->page < $this->tpage){ $next = $this->page+1; $text .= '<a title=下一页 href='.$this->varstr.'page='.$next.'>[>]</a>'; } if ($setpage < $this->pers) { $nextpre = $setpage*($this->pernum+1); $text .= '<a title=下一列 href='.$this->varstr.'page='.$nextpre.'>[>>]</a>'; } if ($this->page < $this->tpage) { $text .= '...<a title=最后一页 href='.$this->varstr.'page='.$this->tpage.'>['.$this->tpage.']</a>'; } } return $text; }
}
/*********************************************** ******************** 实例调用 ***************** ***********************************************
申明一个分页新类 $p = new showPage;
$num = 100; //记录总数 $psize = 15; //每页显示记录数
$smarty->assign('pp',$p->PP($num,$psize));
MySQL 和 SQL server 使用的实例与区别
// MySQL 分页实例 $db->query("select * from table milit $p->limit");
// SQL server 分页实例(一定要结合 ADOdb一起使用) $SQL = "SELECT title FROM mytable ORDER BY id DESC"; $rs = $db->SelectLimit($SQL,$p->psize,$p->sid);
*/
?>
|