用户
 找回密码
 入住 CI 中国社区
搜索
查看: 22809|回复: 76
收起左侧

[库 Library] 一个简单的分页类

    [复制链接]
发表于 2011-5-26 14:34:10 | 显示全部楼层 |阅读模式
本帖最后由 rockey329 于 2011-5-26 14:41 编辑

按照CI自带的分页类的思想,从自身的要求出发写的一个分页类~第一次分享代码,有什么意见建议请指正
实现效果:

首页: 共25条数据  第 1/13 页  1 2 3 4 5 6 7 下一页  末页

页中: 共25条数据  第 6/13 页 首页  上一页 3 4 5 6 7 8 9 下一页  末页

页尾: 共25条数据  第 13/13 页 首页  上一页 7 8 9 10 11 12 13

地址栏:http://localhost/test/page/11.html

//Custom_pagination.php

PHP复制代码
 
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
/**
 * var thinkPod
 * 关于 页码有效性的判断需要加在 控制器中判断,即当页码数<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;
//first_link
if($page_num > 1){
$output .= $this->first_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url).'" >首页</a>'.$this->first_tag_close;
}
//prev_link
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;
}
}
//next_link
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;
}
//last_link
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;
}
}
 
复制代码



控制器调用
PHP复制代码
 
$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();
 
 
复制代码


发表于 2017-8-30 13:45:10 | 显示全部楼层
dddddddddddddddddddddddddddddddddddddddddddddddddd
发表于 2017-12-30 15:19:03 | 显示全部楼层
支持支持支持支持支持支持支持支持支持支持支持
发表于 2015-7-6 14:27:37 | 显示全部楼层
ddddddddddddddddddddddddddddddd
发表于 2011-7-7 00:38:50 | 显示全部楼层
it's very nice!
发表于 2011-7-18 13:14:08 | 显示全部楼层
非常に良い
发表于 2011-7-18 13:27:57 | 显示全部楼层
.............
发表于 2011-8-17 15:36:04 | 显示全部楼层
支持下!
发表于 2012-2-24 16:11:13 | 显示全部楼层
xx谢谢~~~~~~~~~
发表于 2012-2-27 22:24:45 | 显示全部楼层
顶 共享!
发表于 2012-2-28 15:06:25 | 显示全部楼层
挺好 以后就可以用了 谢谢
发表于 2012-2-28 16:05:47 | 显示全部楼层
非常不错,还是这种思路的分页比较适合咱们国人的思维,顶楼主!!!
发表于 2012-3-22 10:16:25 | 显示全部楼层
能不能详细点,暂时还是新手。您这没有取数据的啊....

本版积分规则