PHP原生分页类分享

2019-11-16    标签:PHP    阅读:462   


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

image.png

分页类文件: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>


【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元 618年中云钜惠大促,精选云产品1折起,助力新基建,618年中大促云服务器88元

‘简忆博客’微信公众号 扫码关注‘简忆博客’微信公众号,获取最新文章动态
转载:请说明文章出处“来源简忆博客”。http://www.tpxhm.com/adetail/254.html

×
觉得文章有用就打赏一下文章作者
微信扫一扫打赏 微信扫一扫打赏
支付宝扫一扫打赏 支付宝扫一扫打赏

文章评论(0)

登录

博主信息

头像

简忆博客
仕而优则学,学而优则仕。

置顶推荐

打赏本站

如果你觉得本站很棒,可以通过扫码支付打赏哦!
微信扫码:你说多少就多少~
微信扫码
支付宝扫码:你说多少就多少~
支付宝扫码
×