php : 自定义分页类

Page.class.php :

<?php
namespace Tools;

class Page
{
    private $total; //数据表中总记录数
    private $listRows; //每页显示行数
    private $limit;
    private $uri;
    private $pageNum; //页数
    private $config = array(‘header‘ => "个记录", "prev" => "上一页", "next" => "下一页", "first" => "首 页", "last" => "尾 页");
    private $listNum = 8;
    /*
     * $total
     * $listRows
     */
    public function __construct($total, $listRows = 10, $pa = "")
    {
        $this->total = $total;
        $this->listRows = $listRows;
        $this->uri = $this->getUri($pa);
        $this->page = !empty($_GET["page"]) ? $_GET["page"] : 1;
        $this->pageNum = ceil($this->total / $this->listRows);
        $this->limit = $this->setLimit();
    }

    private function setLimit()
    {
        return "Limit " . ($this->page - 1) * $this->listRows . ", {$this->listRows}";
    }

    private function getUri($pa)
    {
        $url = $_SERVER["REQUEST_URI"] . (strpos($_SERVER["REQUEST_URI"], ‘?‘) ? ‘‘ : "?") . $pa;
        $parse = parse_url($url);

        if (isset($parse["query"])) {
            parse_str($parse[‘query‘], $params);
            unset($params["page"]);
            $url = $parse[‘path‘] . ‘?‘ . http_build_query($params);

        }

        return $url;
    }

    public function __get($args)
    {
        if ($args == "limit") {
            return $this->limit;
        } else {
            return null;
        }

    }

    private function start()
    {
        if ($this->total == 0) {
            return 0;
        } else {
            return ($this->page - 1) * $this->listRows + 1;
        }

    }

    private function end()
    {
        return min($this->page * $this->listRows, $this->total);
    }

    private function first()
    {
        $html = "";
        if ($this->page == 1) {
            $html .= ‘‘;
        } else {
            $html .= "&nbsp;&nbsp;<a href=‘{$this->uri}&page=1‘>{$this->config["first"]}</a>&nbsp;&nbsp;";
        }

        return $html;
    }

    private function prev()
    {
        $html = "";
        if ($this->page == 1) {
            $html .= ‘‘;
        } else {
            $html .= "&nbsp;&nbsp;<a href=‘{$this->uri}&page=" . ($this->page - 1) . "‘>{$this->config["prev"]}</a>&nbsp;&nbsp;";
        }

        return $html;
    }

    private function pageList()
    {
        $linkPage = "";

        $inum = floor($this->listNum / 2);

        for ($i = $inum; $i >= 1; $i--) {
            $page = $this->page - $i;

            if ($page < 1) {
                continue;
            }

            $linkPage .= "&nbsp;<a href=‘{$this->uri}&page={$page}‘>{$page}</a>&nbsp;";

        }

        $linkPage .= "&nbsp;{$this->page}&nbsp;";

        for ($i = 1; $i <= $inum; $i++) {
            $page = $this->page + $i;
            if ($page <= $this->pageNum) {
                $linkPage .= "&nbsp;<a href=‘{$this->uri}&page={$page}‘>{$page}</a>&nbsp;";
            } else {
                break;
            }

        }

        return $linkPage;
    }

    private function next()
    {
        $html = "";
        if ($this->page == $this->pageNum) {
            $html .= ‘‘;
        } else {
            $html .= "&nbsp;&nbsp;<a href=‘{$this->uri}&page=" . ($this->page + 1) . "‘>{$this->config["next"]}</a>&nbsp;&nbsp;";
        }

        return $html;
    }

    private function last()
    {
        $html = "";
        if ($this->page == $this->pageNum) {
            $html .= ‘‘;
        } else {
            $html .= "&nbsp;&nbsp;<a href=‘{$this->uri}&page=" . ($this->pageNum) . "‘>{$this->config["last"]}</a>&nbsp;&nbsp;";
        }

        return $html;
    }

    private function goPage()
    {
        return ‘&nbsp;&nbsp;<input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>‘ . $this->pageNum . ‘)?‘ . $this->pageNum . ‘:this.value;location=\‘‘ . $this->uri . ‘&page=\‘+page+\‘\‘}" value="‘ . $this->page . ‘" style="width:25px"><input type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>‘ . $this->pageNum . ‘)?‘ . $this->pageNum . ‘:this.previousSibling.value;location=\‘‘ . $this->uri . ‘&page=\‘+page+\‘\‘">&nbsp;&nbsp;‘;
    }
    public function fpage($display = array(0, 1, 2, 3, 4, 5, 6, 7, 8))
    {
        $html[0] = "&nbsp;&nbsp;共有<b>{$this->total}</b>{$this->config["header"]}&nbsp;&nbsp;";
        $html[1] = "&nbsp;&nbsp;每页显示<b>" . ($this->end() - $this->start() + 1) . "</b>条,本页<b>{$this->start()}-{$this->end()}</b>条&nbsp;&nbsp;";
        $html[2] = "&nbsp;&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;&nbsp;";

        $html[3] = $this->first();
        $html[4] = $this->prev();
        $html[5] = $this->pageList();
        $html[6] = $this->next();
        $html[7] = $this->last();
        $html[8] = $this->goPage();
        $fpage = ‘‘;
        foreach ($display as $index) {
            $fpage .= $html[$index];
        }

        return $fpage;

    }

}

使用例子:

 $goods = D("Goods");

// 1)分页设置
$total = $goods->count(); // 总记录数
$listRows = 7; // 每页显示条数

// 2)实例化分页对象
$page = new \Tools\Page($total, $listRows);

// 3)分页 sql 语句
$sql = "select * from sw_goods order by goods_id desc " . $page->limit;//limit 方法返回‘limit xx,xx‘
$info = $goods->query($sql);

// 4)制作页码列表
$fpage = $page->fpage(array(3,4,5,6,7,8)); // 前面的统计信息不要

// 5)分配数组
$this->assign("info", $info);
$this->assign("pagelist", $fpage);
$this->display("showgoodslist");

 

---->>>

时间: 2024-10-24 08:06:56

php : 自定义分页类的相关文章

Django 自定义分页类

分页类代码: class Page(object): ''' 自定义分页类 可以实现Django ORM数据的的分页展示 输出HTML代码: 使用说明: from utils import mypage page_obj = mypage.Page(total_num, current_page, 'publisher_list') publisher_list = data[page_obj.data_start:page_obj.data_end] page_html = page_obj.

python全栈系列之---自定义分页类

# coding:utf8 # __author: Administrator # date: 2018/3/7 0007 # /usr/bin/env python import tornado.web from math import ceil LIST_INFO =[ {'username':'ld',"email":'[email protected]'}, ] class Pagination: #传入当前页,总条数 def __init__(self,current_pag

自定义分页类代码

/** * 分页效果显示 */ function getPagestr($url, $totalNum, $showNum, $page) { $totalPage = ceil($totalNum / $showNum); $page = intval($_GET['p']); $page = ($page < 1)? 1 : $page; $start = ($page - 1) * $showNum; $prev = $page - 1; $prev = max($prev, 1); $n

刚写的一个js分页类,未优化

以前也写过,很久以前了,写的很长,并且使用起来也不灵活.这次搞了个灵活版的. /* * SunPage --自定义分页类,仅获取分页的html代码,简单应用 * Sunbt 2015-5-4 * v1.0 * @param current_page int 当前页 * @param totle_page int 总页数 * @param take_num int 当前页左右携带页码数 * @param func_obj obj 分页实现函数 */ var SunPage = function(c

freemarker自定义分页(springboot、bootstrap4)

先看下最终效果: 源码地址:https://github.com/zhouyu629/freemarker-page-demo 实现过程 一.新建springboot项目,导入相关依赖包 <!--web组件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </d

好用的ASP.NET 分页类 简单好用 支持 AJAX 自定义文字

在做网站没用 JS UI控件时 很实用 用法: var ps=new PageString(); /*可选参数*/ ps.SetIsEnglish = true;// 是否是英文 (默认:false) ps.SetIsShowText = true;//是否显示分页文字 (默认:true) //ps.TextFormat="" (默认值:<span class=\"pagetext\"><strong>总共</strong>:{0

ThinkPHP3验证码、文件上传、缩略图、分页(自定义工具类、session和cookie)

验证码 TP框架中自带了验证码类 位置:Think/verify.class.php 在LoginController控制器中创建生存验证码的方法 login.html登陆模板中 在LoginController控制器中判断验证码是否正确并且判断登陆是否成功 文件上传 用到的知识点: 1.文件上传的时候,要设置表单的enctype属性 2.$_FILE[名字][]用来接收文件的信息 第二维的字段: name size error type tmp_name 3.move_uploaded_fil

php 数据分页类,可自定义多个分页样式

调用分页类的方法: // 测试分页 public function pageTestAction() { Load::load_class('getPage',DIR_BF_ROOT.'classes',0); $list = M('category')->field(array('id','catname','model'))->select(); $total = M('category')->findCount(); //总条数 $biao = isset($_GET['page'

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

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