PHP碎码——分页类

写了两个版本,还是后面好点,只计算关键数据,返回数组,html代码例外拼接

<?php
/**
 * 分页类
 * @author  timo
 * @version 2016-12-11 08:15
 */
class paginate{
    
    //当前页码
    private $page;
    //记录总条目
    private $entry_total;
    //每页显示多少个记录
    private $page_size;
    //纯数值li总数,即分页栏的长度(不包括首尾上下页)
    private $page_li_count;
    //总页数
    private $page_count;

    private $result;

    private $active;
    //该url末尾必需带有?或者&
    private $url;
    
    /**
     * 
     * @param unknown $url  跳转的链接地址
     * @param unknown $entry_total  记录的总条目
     * @param number $page_size     每页显示多少个记录
     * @param number $page_li_count 分页栏显示多少个纯数值的li (不包括首尾上下页),即分页栏的长度
     */
    public function __construct($entry_total,$page_size = 5,$page_li_count = 1){
        //初始化成员变量,参数还需要仔细筛选
        $this->entry_total = (int)$entry_total;
        $this->page_size = (int)$page_size;
        $this->page_count = ceil($entry_total/$page_size);
        //分页栏的长度取用户提交的分页栏长度与页面总数中的较小值
        $this->page_li_count = $page_li_count > $this->page_count ? $this->page_count : $page_li_count;
        
    }

    
    /**
     * 设置当前页及active状态
     * @param unknown $page 合法参数为:first end 1234
     */
    public function setPage($page){
        if ($page == ‘end‘) {
            $this->active = ‘end‘;
            $this->page = $this->getPagecount();
        }elseif ($page>0 && $page<=$this->page_count) {
            $this->active = $page;
            $this->page = $page;
        }else{  //first或传递非法值的会被定到首页去
            $this->active = ‘first‘;
            $this->page = 1;
        }
    }
    /**
     * 
     * @param unknown $url //该url末尾必需带有?或者&
     */
    public function setURL($url){
        
        $this->url = $url;
    }
    //当前页码
    public function getPage(){
        return $this->page;
    }
    //共计多少页
    public function getPagecount(){
        return $this->page_count;
    }
    //共计多少条记录
    public function getEntrycount(){
        return $this->entry_total;
    }
    
    /**
     * 计算当前页的分页栏需要的信息
     * @return 返回数组,包含拼接分页关键信息
     */
    public function create(){
        //首页
        $first_page= "first";
        //计算上页页码,最小为1
        $pre_page = ($this->page-1)<=1 ? 1 : $this->page-1;
        //计算下一页页码,最大为page_count
        $next_page = ($this->page+1)>=$this->page_count ? $this->page_count : $this->page+1;
        //尾页
        $end_page= "end";
        $nums_page = [];
        //这个判断与初始化变量中的判断重复了,但...安全点
        if ($this->page_count >= $this->page_li_count) {
            //中间li为第几个,偶数取中偏前的一个
            $mid_li = $this->page_li_count%2==0 ? $this->page_li_count/2 : (($this->page_li_count-1)/2)+1;
            //理想情况下,$mid_li后面li应有的个数
            $right_li_num = $this->page_li_count - $mid_li;
            //理想情况下,$mid_li前面li应有的个数
            $left_li_num = $mid_li-1;
            //计算最右边的页码
            if ($this->page <= $left_li_num) {
                //若当前页左边li个数不足以让其居中,则最右端页码等于最右端li的编号
                $right_li_page = $this->page_li_count;
            }else {
                $right_li_page = ($this->page_count-$this->page) >= $right_li_num ? $this->page+$right_li_num : $this->page_count;
            }
            for ($i = 0; $i < $this->page_li_count ; $i++) {
                //看着可能有点绕,纸上算算就知道了,已知最右边li的页码,li的总数,当前li的编号为$i+1,算当前li对应的页码
                $n = $right_li_page-$this->page_li_count+$i+1;
                $nums_page[] = $n;
            }
        }  
        //将这几个拼接起来
        $this->result[‘first‘] = $first_page;
        $this->result[‘end‘] = $end_page;
        $this->result[‘pre‘] = $pre_page;
        $this->result[‘next‘] = $next_page;
        $this->result[‘nums‘] = $nums_page;
        $this->result[‘active‘] = $this->active;
        return $this->result;
    }
    
    
    public function getHTML(){
        
        //待完善........
        $url = isset($this->url) ? $this->url : ‘?‘;
        
        $first_class = $this->result[‘active‘] == ‘first‘ ? ‘active‘ : ‘‘;
        $end_class = $this->result[‘active‘] == ‘end‘ ? ‘active‘ : ‘‘;
        $pre_class = $this->result[‘active‘] == ‘pre‘ ? ‘active‘ : ‘‘;
        $next_class = $this->result[‘active‘] == ‘next‘ ? ‘active‘ : ‘‘;
  
        $first_page_html = <<<HTML
<li class="$first_class"><a href="{$url}page={$this->result[‘first‘]}">首页</a></li>
HTML;
        $pre_page_html = <<<HTML
<li class="$pre_class"><a href="{$url}page={$this->result[‘pre‘]}">上一页</a></li>
HTML;
        $next_page_html = <<<HTML
<li class="$next_class"><a href="{$url}page={$this->result[‘next‘]}">下一页</a></li>
HTML;
        $end_page_html = <<<HTML
<li class="$end_class"><a href="{$url}page={$this->result[‘end‘]}">尾页</a></li>
HTML;
        $lis_page_html = ‘‘;
        foreach ($this->result[‘nums‘] as $v){
            $li_class =  $this->result[‘active‘] == $v ? ‘active‘ : ‘‘;
            $lis_page_html .= <<<HTML
<li class="$li_class"><a href="{$url}page=$v">$v</a></li>
HTML;
        }
        
        $htmlcode =  $first_page_html.$pre_page_html.$lis_page_html.$next_page_html.$end_page_html;
        
        return $htmlcode;
        
    }
    
}

/***********
 * 
<?php

require ‘paginate02.class.php‘;
$a = new paginate(10,5,4);
$a-> setPage( isset($_GET[‘page‘])?$_GET[‘page‘]:1);
$a->create();

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>fenye</title>
    <link rel="stylesheet" href="css/bootstrap.css">
</head>
<body>
    <ul class="pagination"> 
        <?php echo $a->getHTML()?>
    </ul>
</body>
</html>
 * 
 */
时间: 2024-10-12 12:31:51

PHP碎码——分页类的相关文章

PHP分页类源码

1 <?php 2 /** 3 file: page.class.php 4 完美分页类 Page 5 */ 6 class Page { 7 private $total; //数据表中总记录数 8 private $listRows; //每页显示行数 9 private $limit; //SQL语句使用limit从句,限制获取记录个数 10 private $uri; //自动获取url的请求地址 11 private $pageNum; //总页数 12 private $page;

定制 ThinkPHP 分页类

第一步,引入: 1 import('ORG/Util/Page'); 2 $total = M('xxx')->count(); //获取总记录数 3 $page = new Page($total, 3); //实例化:(总数,每页显示的记录数) 4 5 $limit = $page->firstRow.','.$page->listRows; //用于SQL 的 limit 语句的限制字符串:'limit 0,12' 6 $result = M('xxx')->limit($l

Yii2中自带分页类实现分页

转 http://www.cnblogs.com/gyrgyr/p/5249392.html 1.首先写控制器层 先引用pagination类 use yii\data\Pagination; 写自己的方法: function actionFenye(){        $data = Field::find();  //Field为model层,在控制器刚开始use了field这个model,这儿可以直接写Field,开头大小写都可以,为了规范,我写的是大写        $pages = n

转载:分页原理+分页代码+分页类制作

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一.对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解. 一.分页原理:       所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数: 每页多少条记录($PageSize)?       当前是第几页($CurrentPageID)? 现在只要再给我一个结果集,我就可以显示某段特

分页原理+分页代码+分页类制作

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一.对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解. 一.分页原理:       所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数: 每页多少条记录($PageSize)?       当前是第几页($CurrentPageID)? 现在只要再给我一个结果集,我就可以显示某段特

完美分页类设计--细说PHP

完美分页类page.class.php,敲完了代码,测试的时候发现一片空白完全没东西输出来,可是代码又没有显示报错,最后只能照着源码一行行的对,发现原来少了个“.”,但是这个 . 是被单引号括起来,被单纯的当做了字符串来看待,所以没有报错.整整用了2个多小时去核对整理自己思路,看代码.因此,细心对于刚开始学PHP参考着源码来敲代码很重要.当我把 . 补齐了,可是效果并不是如下.而是:完全没有分页结构的信息.我显示反复对了好多次分页结构的方法fpage()的代码,都没有感觉都没有问题.当时我代码第

自定义MVC框架之工具类-分页类的封装

以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类. 这次重新改造MVC有几个很大的收获 >全部代码都是用Ubuntu+Vim编写,以前都是windows上开发,这次彻底迷上Ubuntu Linux >裸装php,用php自带的服务器解释执行php,缺哪个扩展就装哪个,最后通过整个MVC框架的开发,把Lamp所有的常用配置与细节搞懂 >通过扩展安装,学习扩展开发与php底层源码分析 总之,终于感觉层次又提升了不少. 分页类代码:

php 分页原理+分页代码+分页类制作

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一.对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解. 一.分页原理:       所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数: 每页多少条记录($PageSize)?       当前是第几页($CurrentPageID)? 现在只要再给我一个结果集,我就可以显示某段特

PHP非常好用的分页类

分页类: <?php /* * ********************************************* * @类名: page * @参数: $myde_total - 总记录数 * $myde_size - 一页显示的记录数 * $myde_page - 当前页 * $myde_url - 获取当前的url * @功能: 分页实现 * @作者: 宋海阁 */ class Page { private $myde_total; //总记录数 private $myde_siz