目前大多数框架都已经集成了自己的分页类,但是如果做个小页面如果引用一个几M的框架感觉大财小用了,所以编写这个分页类的目的是方便不使用框架的小页面用的。

分页类文件:Page.class.php
<?php
/* * *********************************************
* @类名: page
* @参数: $myde_total - 总记录数
* $myde_size - 一页显示的记录数
* $myde_page - 当前页
* $myde_url - 获取当前的url
* @功能: 分页实现
*/
class page {
private $myde_total; //总记录数
private $myde_size; //一页显示的记录数
private $myde_page; //当前页
private $myde_page_count; //总页数
private $myde_i; //起头页数
private $myde_en; //结尾页数
private $myde_url; //获取当前的url
/*
* $show_pages
* 页面显示的格式,显示链接的页数为2*$show_pages+1。
* 如$show_pages=2那么页面上显示就是[首页] [上页] 1 2 3 4 5 [下页] [尾页]
*/
private $show_pages;
public function __construct($myde_total = 1, $myde_size = 1, $myde_page = 1, $myde_url, $show_pages = 2) {
$this->myde_total = $this->numeric($myde_total);
$this->myde_size = $this->numeric($myde_size);
$this->myde_page = $this->numeric($myde_page);
$this->myde_page_count = ceil($this->myde_total / $this->myde_size);
$this->myde_url = $myde_url;
if ($this->myde_total < 0)
$this->myde_total = 0;
if ($this->myde_page < 1)
$this->myde_page = 1;
if ($this->myde_page_count < 1)
$this->myde_page_count = 1;
if ($this->myde_page > $this->myde_page_count)
$this->myde_page = $this->myde_page_count;
$this->limit = ($this->myde_page - 1) * $this->myde_size;
$this->myde_i = $this->myde_page - $show_pages;
$this->myde_en = $this->myde_page + $show_pages;
if ($this->myde_i < 1) {
$this->myde_en = $this->myde_en + (1 - $this->myde_i);
$this->myde_i = 1;
}
if ($this->myde_en > $this->myde_page_count) {
$this->myde_i = $this->myde_i - ($this->myde_en - $this->myde_page_count);
$this->myde_en = $this->myde_page_count;
}
if ($this->myde_i < 1)
$this->myde_i = 1;
}
//检测是否为数字
private function numeric($num) {
if (strlen($num)) {
if (!preg_match("/^[0-9]+$/", $num)) {
$num = 1;
} else {
$num = substr($num, 0, 11);
}
} else {
$num = 1;
}
return $num;
}
//地址替换
private function page_replace($page) {
return str_replace("{page}", $page, $this->myde_url);
}
//首页
private function myde_home() {
if ($this->myde_page != 1) {
return "<a href='" . $this->page_replace(1) . "' title='首页'>首页</a>";
} else {
return "<p>首页</p>";
}
}
//上一页
private function myde_prev() {
if ($this->myde_page != 1) {
return "<a href='" . $this->page_replace($this->myde_page - 1) . "' title='上一页'><<</a>";
} else {
return "<p><<</p>";
}
}
//下一页
private function myde_next() {
if ($this->myde_page != $this->myde_page_count) {
return "<a href='" . $this->page_replace($this->myde_page + 1) . "' title='下一页'>>></a>";
} else {
return"<p>>></p>";
}
}
//尾页
private function myde_last() {
if ($this->myde_page != $this->myde_page_count) {
return "<a href='" . $this->page_replace($this->myde_page_count) . "' title='尾页'>尾页</a>";
} else {
return "<p>尾页</p>";
}
}
//输出
public function myde_write($id = 'page') {
$str = "<div id=" . $id . ">";
$str.="<p class='pageRemark'>共<b>" . $this->myde_page_count .
"</b>页<b>" . $this->myde_total . "</b>条数据</p>";
$str.="<div class='clearboth'></div>";
$str.=$this->myde_home();
$str.=$this->myde_prev();
if ($this->myde_i > 1) {
$str.="<p class='pageEllipsis'>...</p>";
}
for ($i = $this->myde_i; $i <= $this->myde_en; $i++) {
// echo $this->myde_page;
if ($i == $this->myde_page) {
$str.="<a href='" . $this->page_replace($i) . "' title='第" . $i . "页' class='cur'>$i</a>";
} else {
$str.="<a href='" . $this->page_replace($i) . "' title='第" . $i . "页'>$i</a>";
}
}
if ($this->myde_en < $this->myde_page_count) {
$str.="<p class='pageEllipsis'>...</p>";
}
$str.=$this->myde_next();
$str.=$this->myde_last();
$str.="</div>";
return $str;
}
}
?>使用方法:
1、连接数据库 config.php
<?php
header('Content-type:text/html;charset=utf8');
date_default_timezone_set('PRC');
$dbserver="localhost";
$dbuser="root";
$dbpwd="root";
$dbname="movie";
//连接数据库
function DBconnect(){
global $dbserver,$dbuser,$dbpwd,$dbname;
$link=new Mysqli($dbserver,$dbuser,$dbpwd,$dbname);
mysqli_query($link,"set names utf8");
return $link;
}
?>2、引用分页类 demo.php
<?php
require_once('app/vendor/Page.class.php'); //分页类
include('app/config/config.php');
$db=DBconnect();
$showrow = 21; //一页显示的行数
$curpage = empty($_GET['page']) ? 1 : $_GET['page']; //当前的页,还应该处理非数字的情况
$url = "/?page={page}"; //分页地址,如果有检索条件 ="?page={page}&q=".$_GET['q']
$sql = "SELECT d_id,d_name,d_pic,d_scoreall,d_score,d_hits,d_time FROM mac_vod ORDER BY d_score desc ";
$total = mysqli_num_rows(mysqli_query($db,$sql)); //记录总条数
if (!empty($_GET['page']) && $total != 0 && $curpage > ceil($total / $showrow))
$curpage = ceil($total_rows / $showrow); //当前页数大于最后页数,取最后一页
//获取数据
$sql .= " LIMIT " . ($curpage - 1) * $showrow . ",$showrow;";
$re=mysqli_query($db,$sql);
$vod_list=array();
while($row=mysqli_fetch_assoc($re)){
$row['d_pic']=$img_host.$row['d_pic'];
$vod_list[]=$row;
}
if ($total > $showrow) {//总记录数大于每页显示数,显示分页
$page = new page($total, $showrow, $curpage, $url, 1);
$showpages=$page->myde_write();
}
?>3、模板渲染 tpl_demo.php
<?php
include('demo.php');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
<!-- 分隔 -->
<div>
<ul>
<?php if($vod_list){?>
<?php foreach($vod_list as $k=>$v){ ?>
<li>
<a href="/?m=vod-detail-id-<?php echo $v['d_id'];?>.html" title="<?php echo $v["d_name"];?>">
<span>
<img src="public/images/indexDefault.png" class="lazy yj" data-original="<?php echo $v["d_pic"];?>" alt="<?php echo $v["d_name"];?>">
<h6>
<i><?php echo $v["d_score"];?>分</i>
</h6>
</span>
<p><?php echo $v["d_name"];?></p>
</a>
</li>
<?php }?>
<?php }?>
</ul>
<div></div>
<!-- 分页 -->
<div>
<?php echo $showpages;?>
</div>
<!-- 分页 -->
</div>
<!-- 分隔 -->
?>
</body>
</html>