php示例功能-分页类

过程化分页
一.创建分页显示出数据,然后建立分页页面
第一步:首先php部分引入配置文件和数据库连接。

<?php
//引入配置文件config.php和数据库类mysql.php
require 'config.php';
require 'mysql.php';
//**获取数据库数据
//实例化创建对象 $Mysql = Mysql::getMysql('ex_page'); //获取记录集fields字段,limit前十条,order用id倒序排序 $object = $Mysql->fields('id,password,create_time')->limit(0, 10)->order('id desc')->select(); ?>

第二步:HTML显示数据部分展现分页部分和CSS部分

<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>分页类</title>
    <!--**********css部分-->
    <style type="text/css">
        /*去掉ul,ol的小圆点,内边距,外边距*/
        ul,ol {
            list-style: outside none none;
            margin: 0;
            padding: 0;
        }
        .page {
            clear:both;
            text-align: center;
        }
        .page ul {
            display: inline-block;
            padding: 10px 0;
        }
        .page li {
            width: 50px;
            height: 32px;
            float: left;
        }
        .page a {
            display: block;
            line-height: 32px;
            background-color: #eee;
            color: #777;
        }
        .page a.active, .page a:hover {
            background-color: #00bfff;
            font-weight: bold;
            color: #fff;
        }
        .page .first a {
            border-bottom-left-radius: 4px;
            border-top-left-radius: 4px;
        }
        .page .last a {
            border-bottom-right-radius: 4px;
            border-top-right-radius: 4px;
        }
    </style>
</head>
<body>

<br><br><br><br>
<!--******外边框和里面内容部分--> <!--边框线宽度1,长度800,居中--> <table border="1" width="800" align="center"> <tr> <th>编号</th> <th>密码</th> <th>创建时间</th> </tr> <!--$object和$obj做循环--> <?php foreach ($object as $key=>$obj) :?> <tr> <td align="center"><?=$obj->id?></td> <td align="center"><?=$obj->password?></td> <td align="center"><?=$obj->create_time?></td> </tr> <?php endforeach;?> </table> <!--****分页部分--> <div class="page"> <ul> <li><a href="javascript:void(0)" class="active">1</a></li> <li><a href="javascript:void(0)">2</a></li> <li><a href="javascript:void(0)">3</a></li> <li><a href="javascript:void(0)">4</a></li> </ul> </div> </body> </html>

第三步:创建分页展示出数据建立分页页面外部1.php调用最终代码:

<?php
//引入配置文件和数据库类
require 'config.php';
require 'mysql.php';

//实例化创建对象
$Mysql = Mysql::getMysql('ex_page');

//获取记录集
$object = $Mysql->fields('id,password,create_time')->limit(0, 10)->order('id desc')->select();

?>

<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>分页类</title>
    <!--**********css部分-->
    <style type="text/css">
        ul,ol {
            list-style: outside none none;
            margin: 0;
            padding: 0;
        }
        .page {
            clear:both;
            text-align: center;
        }
        .page ul {
            display: inline-block;
            padding: 10px 0;
        }
        .page li {
            width: 50px;
            height: 32px;
            float: left;
        }
        .page a {
            display: block;
            line-height: 32px;
            background-color: #eee;
            color: #777;
        }
        .page a.active, .page a:hover {
            background-color: #00bfff;
            font-weight: bold;
            color: #fff;
        }
        .page .first a {
            border-bottom-left-radius: 4px;
            border-top-left-radius: 4px;
        }
        .page .last a {
            border-bottom-right-radius: 4px;
            border-top-right-radius: 4px;
        }
    </style>
</head>
<body>

<br><br><br><br>
<!--******外边框和里面内容部分-->
<!--边框线宽度1,长度800,居中-->
<table border="1" width="800" align="center">
    <tr>
        <th>编号</th>
        <th>密码</th>
        <th>创建时间</th>
    </tr>
    <!--$object和$obj做循环-->
    <?php foreach ($object as $key=>$obj) :?>
        <tr>
            <td align="center"><?=$obj->id?></td>
            <td align="center"><?=$obj->password?></td>
            <td align="center"><?=$obj->create_time?></td>
        </tr>
    <?php endforeach;?>
</table>

<!--****分页部分-->
<div class="page">
    <ul>
        <li><a href="javascript:void(0)" class="active">1</a></li>
        <li><a href="javascript:void(0)">2</a></li>
        <li><a href="javascript:void(0)">3</a></li>
        <li><a href="javascript:void(0)">4</a></li>
    </ul>
</div>

</body>
</html>

1.php调用结果:

二.创建分页,第二步将过程化的分页模式实现出来
第一步:首先创建php部分面向过程化的分成方式

<?php
//每页的条数
$pageSize = 10;

//当前页码
$page = 1;

//总页码初始为1
$pageAbsolute = 1;

//先判断page是否存在
if (isset($_GET['page'])) {
    //将得到的页码赋值给变量
    $page = $_GET['page'];

    //如果页面值为空或小于零或不是数字,则默认为1
    if (empty($page) || $page <= 0 || !is_numeric($page)) {
        $page = 1;
    } else {
        $page = intval($page);
    }
}

//实例化创建对象
$Mysql = Mysql::getMysql('ex_page');

//获取数据总量
$Mysql->select();
//获取里面计算的值
$total = $Mysql->count();

//得到总页码
if ($total != 0) {
    $pageAbsolute = ceil($total / $pageSize);
}

//超过页码判断
if ($page > $pageAbsolute) {
    $page = $pageAbsolute;
}

//计算当前页码在从第几条开始
$num = ($page - 1) * $pageSize;

//获取记录集
$object = $Mysql->fields('id,password,create_time')->limit($num, $pageSize)->order('id desc')->select();
?>

第二步:页面HTML部分-页码编排方式

<!--页码编排方式部分-->
<div class="page">
    <ul>
        <?php
        //上一页
        if ($page == 1) {
            echo '<li class="first"><a href="javascript:void(0)">&lt;</a></li>';
        } else {
            echo '<li class="first"><a href="1.php?page='.($page - 1).'">&lt;</a></li>';
        }

        //循环分页页码
        for ($i = 1; $i <= $pageAbsolute; $i++) {
            if ($page == $i) {
                echo '<li><a href="javascript:void(0)" class="active">'.$i.'</a></li>';
            } else {
                echo '<li><a href="1.php?page='.$i.'">'.$i.'</a></li>';
            }

        }

        //下一页
        if ($page == $pageAbsolute) {
            echo '<li class="last"><a href="javascript:void(0)">&gt;</a></li>';
        } else {
            echo '<li class="last"><a href="1.php?page='.($page + 1).'">&gt;</a></li>';
        }
        ?>
    </ul>
</div>

第三步:将过程化的分页模式实现出来1.php调用最终代码:

<?php
//引入配置文件和数据库类
require 'config.php';
require 'mysql.php';

//每页的条数
$pageSize = 10;

//当前页码
$page = 1;

//总页码初始为1
$pageAbsolute = 1;

//先判断page是否存在
if (isset($_GET['page'])) {
    //将得到的页码赋值给变量
    $page = $_GET['page'];

    //如果页面值为空或小于零或不是数字,则默认为1
    if (empty($page) || $page <= 0 || !is_numeric($page)) {
        $page = 1;
    } else {
        $page = intval($page);
    }
}

//实例化创建对象
$Mysql = Mysql::getMysql('ex_page');

//获取数据总量
$Mysql->select();
//获取里面计算的值
$total = $Mysql->count();

//得到总页码
if ($total != 0) {
    $pageAbsolute = ceil($total / $pageSize);
}

//超过页码判断
if ($page > $pageAbsolute) {
    $page = $pageAbsolute;
}

//计算当前页码在从第几条开始
$num = ($page - 1) * $pageSize;

//获取记录集
$object = $Mysql->fields('id,password,create_time')->limit($num, $pageSize)->order('id desc')->select();

?>

<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>分页类</title>
    <!--************css部分********************-->
    <style type="text/css">
        ul,ol {
            list-style: outside none none;
            margin: 0;
            padding: 0;
        }
        .page {
            clear:both;
            text-align: center;
        }
        .page ul {
            display: inline-block;
            padding: 10px 0;
        }
        .page li {
            width: 50px;
            height: 32px;
            float: left;
        }
        .page a {
            display: block;
            line-height: 32px;
            background-color: #eee;
            color: #777;
        }
        .page a.active, .page a:hover {
            background-color: #00bfff;
            font-weight: bold;
            color: #fff;
        }
        .page .first a {
            border-bottom-left-radius: 4px;
            border-top-left-radius: 4px;
        }
        .page .last a {
            border-bottom-right-radius: 4px;
            border-top-right-radius: 4px;
        }
    </style>
</head>
<body>

<br><br><br><br>
<!--****************外边框和里面内容部分********************-->
<!--边框线宽度1,长度800,居中-->
<table border="1" width="800" align="center">
    <tr>
        <th>编号</th>
        <th>密码</th>
        <th>创建时间</th>
    </tr>
    <!--$object和$obj做循环-->
    <?php foreach ($object as $key=>$obj) :?>
        <tr>
            <td align="center"><?=$obj->id?></td>
            <td align="center"><?=$obj->password?></td>
            <td align="center"><?=$obj->create_time?></td>
        </tr>
    <?php endforeach;?>
</table>

<!--*****************分页部分***************************-->
<div class="page">
    <ul>
        <?php
        //上一页
        if ($page == 1) {
            echo '<li class="first"><a href="javascript:void(0)">&lt;</a></li>';
        } else {
            echo '<li class="first"><a href="1.php?page='.($page - 1).'">&lt;</a></li>';
        }

        //循环分页页码
        for ($i = 1; $i <= $pageAbsolute; $i++) {
            if ($page == $i) {
                echo '<li><a href="javascript:void(0)" class="active">'.$i.'</a></li>';
            } else {
                echo '<li><a href="1.php?page='.$i.'">'.$i.'</a></li>';
            }

        }

        //下一页
        if ($page == $pageAbsolute) {
            echo '<li class="last"><a href="javascript:void(0)">&gt;</a></li>';
        } else {
            echo '<li class="last"><a href="1.php?page='.($page + 1).'">&gt;</a></li>';
        }
        ?>
    </ul>
</div>

</body>
</html>

1.php调用结果:

创建分页类
一.创建分页类不需要对外当接口使用,并且也不需要继承
第一步:先将基础page.php分页类构建起来

<!--分页类,不需要对外当接口使用,并且也不需要继承-->
<?php
class Page
{
    //*************属性部分***********
    //总记录数
    private $total;
    //每页显示条数
    private $pageSize;
    //分页limit
    private $limit;
    //当前页面
    private $page;
    //总页码
    private $pageAbsolute;
    //地址栏
    private $url;

    //************构造方法初始化************
    //$total总记录数和$pageSize分页数要从mysql传进来
    public function __construct($total, $pageSize)
    {
        //总记录数,如果获取不到数就显示一条
        $this->total            =   $total ? $total : 1;

        //分页数量
        $this->pageSize         =   $pageSize;

        //总页码
        $this->pageAbsolute     =   ceil($this->total / $this->pageSize);

        //当前页面
        $this->page             =   $this->setPage();

        //分页Limit
        $this->limit            =   ($this->page - 1) * $this->pageSize;

        //地址栏
        $this->url              =   $this->setUrl();

        //echo $this->total;
        //echo $this->pageSize;
        //echo $this->pageAbsolute;
        //echo $this->page;
        //echo $this->limit;
        //echo $this->url;
    }

    //*************方法部分****************
    //内部自我实例化,静态方法
    public static function getObject($total, $pageSize = 10)
    {
        return new self($total, $pageSize);
    }
    //对外返回一些数据获取limit
    public function getLimit()
    {
        return $this->limit;
    }

    //对外返回一些数据获取pageSize
    public function getPageSize()
    {
        return $this->pageSize;
    }

//***基础分页类
//获取当前页面page private function setPage() { //默认第一页 $page = 1; //先判断page 是否存在 if (isset($_GET['page'])) { //将得到的页码赋值给变量 $page = $_GET['page']; //如果页面值为空或小于零或不是数字,则默认为1 if (empty($page) || $page <= 0 || !is_numeric($page)) { $page = 1; } else { $page = intval($page); } } //在setPage()方法增加判断得到总页码 if ($this->total != 0) { $this->pageAbsolute = ceil($this->total / $this->pageSize); } //在setPage()方法增加判断超过页码判断 if ($page > $this->pageAbsolute) { $page = $this->pageAbsolute; } //返回page return $page; } //获取地址,主要是除了page的其它参数,防止总记录数不对应 private function setUrl() { //获取路径地址 $url = $_SERVER['REQUEST_URI']; //解析地址 $parse = parse_url($url); //判断是否存在query元素是否存在 if (isset($parse['query'])) { //获取query元素变成独立数组 parse_str($parse['query'], $query); //移出数组中的page unset($query['page']); //合并成新的地址 $url = $parse['path'].'?'.http_build_query($query); } return $url; } }

第二步:逻辑页2.php测试代码

<?php

//引入配置文件和数据库类
require 'config.php';
require 'mysql.php';

//引入分页类
require 'page.php';
//******测试分页数据
//实例化创建对象
$Mysql = Mysql::getMysql('ex_page');

//获取数据总量
$Mysql->select();
$total = $Mysql->count();

//实例化分页类
$Page = Page::getObject($total);

//获取记录集
$object = $Mysql->fields('id,password,create_time')
    ->limit($Page->getLimit(), $Page->getPageSize())
    ->order('id desc')
    ->select();
?>

<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>分页类</title>
</head>
<body>

<br><br><br><br>

<table border="1" width="800" align="center">
    <tr>
        <th>编号</th>
        <th>密码</th>
        <th>创建时间</th>
    </tr>

    <?php foreach ($object as $key=>$obj) :?>
        <tr>
            <td align="center"><?=$obj->id?></td>
            <td align="center"><?=$obj->password?></td>
            <td align="center"><?=$obj->create_time?></td>
        </tr>
    <?php endforeach;?>
</table>

<br>

</body>
</html>

http://192.168.3.62/Example/Page/2.php?page=11在逻辑页面中测试结果:

分页页码设置

1.添加php部分数字目录
2.添加php分页信息
3.获取URL,加上?号
4.php部分添加上下翻页设置

<?php

//分页类
class Page
{
    //总记录数
    private $total;
    //每页显示条数
    private $pageSize;
    //分页limit
    private $limit;
    //当前页面
    private $page;
    //总页码
    private $pageAbsolute;
    //地址栏
    private $url;
    //数字分页两边的个数
    private $bothNum;

    //构造方法初始化
    public function __construct($total, $pageSize)
    {
        //总记录数
        $this->total            =   $total ? $total : 1;

        //分页数量
        $this->pageSize         =   $pageSize;

        //总页码
        $this->pageAbsolute     =   ceil($this->total / $this->pageSize);

        //当前页面
        $this->page             =   $this->setPage();

        //分页Limit
        $this->limit            =   ($this->page - 1) * $this->pageSize;

        //地址栏
        $this->url              =   $this->setUrl();

        //数字分页两边的个数
        $this->bothNum          =   3;

    }

    //内部自我实例化,静态方法
    public static function getObject($total, $pageSize = 10)
    {
        return new self($total, $pageSize);
    }

    //获取limit
    public function getLimit()
    {
        return $this->limit;
    }

    //获取pageSize
    public function getPageSize()
    {
        return $this->pageSize;
    }


    //设置当前页面page
    private function setPage()
    {
        //默认第一页
        $page = 1;

        //先判断page 是否存在
        if (isset($_GET['page'])) {
            //将得到的页码赋值给变量
            $page = $_GET['page'];

            //如果页面值为空或小于零或不是数字,则默认为1
            if (empty($page) || $page <= 0 || !is_numeric($page)) {
                $page = 1;
            } else {
                $page = intval($page);
            }
        }

        //得到总页码
        if ($this->total != 0) {
            $this->pageAbsolute = ceil($this->total / $this->pageSize);
        }

        //超过页码判断
        if ($page > $this->pageAbsolute) {
            $page = $this->pageAbsolute;
        }

        //返回page
        return $page;
    }

    //获取地址,主要是除了page的其它参数,防止总记录数不对应
    private function setUrl()
    {
        //获取路径地址加上?号
        $url    =   $_SERVER['REQUEST_URI'].'?';
        //解析地址
        $parse  =   parse_url($url);

        //判断是否存在query 元素是否存在
        if (isset($parse['query'])) {
            //获取query 元素变成独立数组
            parse_str($parse['query'], $query);
            //移出数组中的page
            unset($query['page']);
            //合并成新的地址
            $url = $parse['path'].'?'.http_build_query($query);
        }

        return $url;
    }

    //数字目录
    private function pageList()
    {

        //初始化变量
        $pageList = '';

        //起始1 按钮判断
        if ($this->page != 1) {
            $pageList .= '<li><a href="'.$this->url.'&page=1">1</a></li>';
        }


        //省略号判断
        if (($this->page - $this->bothNum) > 1) {
            $pageList .= '<li><a href="javascript:void(0)">...</a></li>';
        }

        //循环当前页左边的页面
        for ($i = $this->page - $this->bothNum; $i < $this->page; $i ++) {
            //小于0 的不显示
            if ($i <=1) continue;
            //显示左边列表
            $pageList .= '<li><a href="'.$this->url.'&page='.$i.'">'.$i.'</a></li>';
        }

        //输出当前页页码
        $pageList .= '<li><a href="javascript:void(0)" class="active">'.$this->page.'</a></li>';


        //循环当前页右边的页面
        for ($i = $this->page + 1; $i <= $this->page + $this->bothNum; $i ++) {
            //如果大于末尾退出
            if ($i > $this->pageAbsolute - 1) break;
            $pageList .= '<li><a href="'.$this->url.'&page='.$i.'">'.$i.'</a></li>';
        }

        //省略号判断
        if ($i <= $this->pageAbsolute - 1) {
            $pageList .= '<li><a href="javascript:void(0)">...</a></li>';
        }

        //末尾数字按钮判断
        if ($this->page != $this->pageAbsolute) {
            $pageList .= '<li><a href="'.$this->url.'&page='.$this->pageAbsolute.'">'.$this->pageAbsolute.'</a></li>';
        }


        //返回
        return $pageList;
    }

    //####上下翻页设置
    //上一页
    private function prev()
    {
        if ($this->page == 1) {
            return '<li><a href="javascript:void(0)">&lt;</a></li>';
        }
        return '<li><a href="'.$this->url.'&page='.($this->page - 1).'">&lt;</a></li>';
    }

    //下一页
    private function next()
    {
        if ($this->page == $this->pageAbsolute) {
            return '<li><a href="javascript:void(0)">&gt;</a></li>';
        }
        return '<li><a href="'.$this->url.'&page='.($this->page + 1).'">&gt;</a></li>';
    }

    //上bothNum页
    private function prevNum()
    {
        if (($this->page - $this->bothNum) < 1) {
            return '<li><a href="javascript:void(0)">&lt;&lt;</a></li>';
        }
        return '<li><a href="'.$this->url.'&page='.($this->page - $this->bothNum).'">&lt;&lt;</a></li>';
    }

    //下bothNum页
    private function nextNum()
    {
        if (($this->page + $this->bothNum) > $this->pageAbsolute) {
            return '<li><a href="javascript:void(0)">&gt;&gt;</a></li>';
        }
        return '<li><a href="'.$this->url.'&page='.($this->page + $this->bothNum).'">&gt;&gt;</a></li>';
    }

    //分页信息
    public function showPage()
    {
        $page   = '';
        $page  .= $this->prev();
        $page  .= $this->prevNum();
        $page  .= $this->pageList();
        $page  .= $this->nextNum();
        $page  .= $this->next();
        return $page;
    }

}

逻辑页2.php测试:

<?php

//引入配置文件和数据库类
require 'config.php';
require 'mysql.php';

//引入分页类
require 'page.php';


//实例化创建对象
$Mysql = Mysql::getMysql('ex_page');

//获取数据总量
$Mysql->select();
$total = $Mysql->count();

//实例化分页类
$Page = Page::getObject($total);


//获取记录集
$object = $Mysql->fields('id,password,create_time')
                ->limit($Page->getLimit(), $Page->getPageSize())
                ->order('id desc')
                ->select();

?>


<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>分页类</title>
    <style type="text/css">
        ul,ol {
            list-style: outside none none;
            margin: 0;
            padding: 0;
        }
        .page {
            clear:both;
            text-align: center;
        }
        .page ul {
            display: inline-block;
            padding: 10px 0;
        }
        .page li {
            width: 50px;
            height: 32px;
            float: left;
        }
        .page a {
            display: block;
            line-height: 32px;
            background-color: #eee;
            color: #777;
        }
        .page a.active, .page a:hover {
            background-color: #00bfff;
            font-weight: bold;
            color: #fff;
        }
        .page .first a {
            border-bottom-left-radius: 4px;
            border-top-left-radius: 4px;
        }
        .page .last a {
            border-bottom-right-radius: 4px;
            border-top-right-radius: 4px;
        }
    </style>
</head>
<body>

<br><br><br><br>

<table border="1" width="800" align="center">
    <tr>
        <th>编号</th>
        <th>密码</th>
        <th>创建时间</th>
    </tr>

    <?php foreach ($object as $key=>$obj) :?>
        <tr>
            <td align="center"><?=$obj->id?></td>
            <td align="center"><?=$obj->password?></td>
            <td align="center"><?=$obj->create_time?></td>
        </tr>
    <?php endforeach;?>
</table>

<br>

<div class="page">
    <ul>
        <?=$Page->showPage()?>
    </ul>
</div>

</body>
</html>

最终测试2.php结果

 

posted on 2018-03-09 14:20  我不是西西  阅读(573)  评论(0)    收藏  举报