一个简单的CI分页类
- <span style="font-size:16px;">/**
- *
- * 关于 页码有效性的判断需要加在 控制器中判断,即当页码数<1或者>总页数
- *
- */
- class Custom_pagination
- {
- var $page_url = ''; //分页目标URL
- var $page_size = 10; //每一页行数
- var $page_num = 1;//页码
- var $rows_num= '';//数据总行数
- var $links_num= 3;//选中链接前后的链接数,必须大于等于1
- var $anchor_class= '';//链接样式类
- var $current_class= '';//当前页样式类
- var $full_tag_open= '';//分页开始标签
- var $full_tag_close= '';//分页结束标签
- var $info_tag_open= '';
- var $info_tag_close= ' ';
- var $first_tag_open= '';
- var $first_tag_close= ' ';
- var $last_tag_open= ' ';
- var $last_tag_close= '';
- var $cur_tag_open= ' <strong>';
- var $cur_tag_close= '</strong>';
- var $next_tag_open= ' ';
- var $next_tag_close= ' ';
- var $prev_tag_open= ' ';
- var $prev_tag_close= '';
- var $num_tag_open= ' ';
- var $num_tag_close= '';
- public function __construct($params = array())
- {
- if (count($params) > 0)
- {
- $this->init($params);
- }
- }
- function init($params = array()) //初始化数据
- {
- if (count($params) > 0)
- {
- foreach ($params as $key => $val)
- {
- if (isset($this->$key))
- {
- $this->$key = $val;
- }
- }
- }
- }
- function create_links()
- {
- ///////////////////////////////////////////////////////
- //准备数据
- ///////////////////////////////////////////////////////
- $page_url = $this->page_url;
- $rows_num = $this->rows_num;
- $page_size = $this->page_size;
- $links_num = $this->links_num;
- if ($rows_num == 0 OR $page_size == 0)
- {
- return '';
- }
- $pages = intval($rows_num/$page_size);
- if ($rows_num % $page_size)
- {
- //有余数pages+1
- $pages++;
- };
- $page_num = $this->page_num < 1 ? '1' : $this->page_num;
- $anchor_class = '';
- if($this->anchor_class !== '')
- {
- $anchor_class = 'class="'.$this->anchor_class.'" ';
- }
- $current_class = '';
- if($this->current_class !== '')
- {
- $current_class = 'class="'.$this->current_class.'" ';
- }
- if($pages == 1)
- {
- return '';
- }
- if($links_num < 0)
- {
- return '- -!links_num必须大于等于0';
- }
- ////////////////////////////////////////////////////////
- //创建链接开始
- ////////////////////////////////////////////////////////
- $output = $this->full_tag_open;
- $output .= $this->info_tag_open.'共'.$rows_num.'条数据 第 '.$page_num.'/'.$pages.' 页'.$this->info_tag_close;
- //首页
- if($page_num > 1)
- {
- $output .= $this->first_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url).'" >首页</a>'.$this->first_tag_close;
- }
- //上一页
- if($page_num > 1)
- {
- $n = $page_num - 1;
- $output .= $this->prev_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$n).'" >上一页</a>'.$this->prev_tag_close;
- }
- //pages
- for($i=1;$i<=$pages;$i++)
- {
- $pl = $page_num - $links_num < 0 ? 0 : $page_num - $links_num;
- $pr = $page_num + $links_num > $pages ? $pages : $page_num + $links_num;
- //判断链接个数是否太少,举例,假设links_num = 2,则链接个数不可少于 5 个,主要是 当page_num 等于 1, 2 和 n,n-1的时候
- if($pr < 2 * $links_num + 1)
- {
- $pr = 2 * $links_num + 1;
- }
- if($pl > $pages-2 * $links_num)
- {
- $pl = $pages - 2 * $links_num;
- }
- if($i == $page_num)
- { //current page
- $output .= $this->cur_tag_open.'<span '.$current_class.' >'.$i.'</span>'.$this->cur_tag_close;
- }else if($i >= $pl && $i <= $pr)
- {
- $output .= $this->num_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$i).'" >'.$i.'</a>'.$this->num_tag_close;
- }
- }
- //下一页
- if($page_num < $pages)
- {
- $n = $page_num + 1;
- $output .= $this->next_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$n).'" >下一页</a>'.$this->next_tag_close;
- }
- //末页
- if($page_num < $pages)
- {
- $output .= $this->last_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$pages).'" >末页</a>'.$this->last_tag_close;
- }
- $output.=$this->full_tag_close;
- return $output;
- }
- }
- </span>
控制器里调用
- <span style="font-size:16px;">$config['page_url']
- = 'about/science';
- $config['page_size'] = $pagesize;
- $config['rows_num'] = $num_rows;
- $config['page_num'] = $page;
- $this->load->library('Custom_pagination');
- $this->custom_pagination->init($config);
- echo $this->custom_pagination->create_links();</span>
- <?php
- class page{
- public $page; //当前页
- public $pagenum; // 页数
- public $pagesize; // 每页显示条数
- public function __construct($count, $pagesize){
- $this->pagenum = ceil($count/$pagesize);
- $this->pagesize = $pagesize;
- $this->page =(isset($_GET['p'])&&$_GET['p']>0) ? intval($_GET['p']) : 1;
- }
- /**
- * 获得 url 后面GET传递的参数
- */
- public function getUrl(){
- $url = 'index.php?'.http_build_query($_GET);
- $url = preg_replace('/[?,&]p=(\w)+/','',$url);
- $url .= (strpos($url,"?") === false) ? '?' : '&';
- return $url;
- }
- /**
- * 获得分页HTML
- */
- public function getPage(){
- $url = $this->getUrl();
- $start = $this->page-5;
- $start=$start>0 ? $start : 1;
- $end = $start+9;
- $end = $end<$this->pagenum ? $end : $this->pagenum;
- $pagestr = '';
- if($this->page>5){
- $pagestr = "<a href=".$url."p=1".">首页</a> ";
- }
- if($this->page!=1){
- $pagestr.= "<a href=".$url."p=".($this->page-1).">上一页</a>";
- }
- for($i=$start;$i<=$end;$i++){
- $pagestr.= "<a href=".$url."p=".$i.">".$i."</a> ";
- }
- if($this->page!=$this->pagenum){
- $pagestr.="<a href=".$url."p=".($this->page+1).">下一页</a>";
- }
- if($this->page+5<$this->pagenum){
- $pagestr.="<a href=".$url."p=".$this->pagenum.">尾页</a> ";
- }
- return $pagestr;
- }
- }
- // 测试代码
- $page = new page(100,10);
- $str=$page->getPage();
- echo $str;
- ?>
一个简单的CI分页类的更多相关文章
- 一个简单的php分页类代码(转载)
入门级php分页类 原文地址:http://www.xfcodes.com/php/fenye/3608.htm 时间:2015-12-16 20:52:00来源:网络 php分页类. 复制代码代码如 ...
- CI 分页类的使用
分页本身很简单,无非就是一个 [limit $offset, $length] 的过程. $length 是每页显示的数据量,这个是固定的.要确定的就只有 $offset了. 在CI中的分页类同样要依 ...
- 一个重构的js分页类
// JavaScript Document /**//** * js分页类 * @param iAbsolute 每页显示记录数 * @param sTableId 分页表格属性ID值,为Strin ...
- PHP简单漂亮的分页类
本文介绍一款原生的PHP分页类,分页样式有点类似bootstrap. <?php /* * ********************************************* * @类名 ...
- THinkPHP简单漂亮的分页类 DownLoad
PHP include_once("config.php"); require_once('page.class.php'); //分页类 $showrow = 10; //一页显 ...
- 简单实用的分页类-python
django自带的分页虽然挺好,但是就想自己弄个通用的 自己写了个分页的类,用的是python, 其他语言改下语法就能用了. #定义好类.class pagemanage: def __init_ ...
- 如何用C++封装一个简单的数据流操作类(附源码),从而用于网络上的数据传输和解析?
历史溯源 由于历史原因,我们目前看到的大部分的网络协议都是基于ASCII码这种纯文本方式,也就是基于字符串的命令行方式,比如HTTP.FTP.POP3.SMTP.Telnet等.早期操作系统UNIX( ...
- java使用注解和反射打造一个简单的jdbc工具类
a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...
- 一个简单实现的string类
为了复习c++知识,简单的实现一个string类,类名为CMyString 环境说明:windows 7 64位 和 CentOS Linux release 7.6.1810 (Core) 开发工具 ...
随机推荐
- 发一个可伸缩线程池大小的python线程池。已通过测试。
发一个可伸缩线程池大小的线程池. 当任务不多时候,不开那么多线程,当任务多的时候开更多线程.当长时间没任务时候,将线程数量减小到一定数量. java的Threadpoolexcutor可以这样,py的 ...
- oracle sql 语句 示例
--oracle 用户对象的导入导出 exp devimage/oracle@172.xx.x.xx/TESTDB owner='devimage' file=d:/devimage.dmp log= ...
- C++模板特化编程
在C++中,模板特化是除了类之外的一种封装变化的方法.模板特化可以通过编译器来对不同的模板参数生成不同的代码. 模板特化通常以模板结构体作为载体.常用技法包括:类型定义.静态成员常量定义和静态成员函数 ...
- webStorage
1.HTML5中的本地存储概念是什么? 很多时候我们会存储用户本地信息到电脑上,例如:比方说用户有一个填充了一半的长表格,然后突然网络连接断开了,这样用户希望你能存储这些信息到本地,当网络恢复的时候, ...
- Android的系统结构简述
(该图片来自网络) Android系统结构主要分为四层,从上到下依次为,Application层,Application Framework层,lib层,Linux kernel层,下面对这四层进行简 ...
- 32、Differential Gene Expression using RNA-Seq (Workflow)
转载: https://github.com/twbattaglia/RNAseq-workflow Introduction RNAseq is becoming the one of the mo ...
- Windows下安装MySQL压缩zip包
MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之 ...
- Entity Framework Code-First(9.9):DataAnnotations - ForeignKey Attribute
DataAnnotations - ForeignKey Attribute: ForeignKey attribute can be applied to properties of a class ...
- C++基础之C++编译调试
C++程序的实现(预处理,编译,连接)Linux平台编译gcc和g++都是GNU的编译器.1.对于.c后缀的文件,gcc把它当做是C程序:g++当做是C++程序:2.对于.cpp后缀的文件,gcc和 ...
- C4-总结
呃,很难受的比赛,中途做到口干舌燥还想尿尿//哦,题目,出的很棒,什么都可以做做,什么都做不下来. 怎么说呢?好像也没犯什么错误,除了日常开始手抖了一下...后面状态进入挺快的,而且遗憾?3-2吧,t ...