一个简单的CI分页类

/**
 * 
 * 关于 页码有效性的判断需要加在 控制器中判断,即当页码数<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;
    }



}

控制器里调用
$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();




<?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;


?>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,下面是一个简单的 JSP 分页案例的示例代码: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% // 模拟从数据库中获取数据 List<String> dataList = new ArrayList<>(); for (int i = 1; i <= 100; i++) { dataList.add("数据 " + i); } // 当前页码和每页显示的数据条数 int currentPage = (request.getParameter("page") != null) ? Integer.parseInt(request.getParameter("page")) : 1; int pageSize = 10; // 计算总数据条数、总页数和当前页的起始索引 int totalRecords = dataList.size(); int totalPages = (int) Math.ceil((double) totalRecords / pageSize); int startIndex = (currentPage - 1) * pageSize; // 获取当前页需要显示的数据 List<String> currentPageData = dataList.subList(startIndex, Math.min(startIndex + pageSize, totalRecords)); %> <!DOCTYPE html> <html> <head> <title>JSP 分页示例</title> </head> <body> <h1>分页示例</h1> <!-- 显示当前页的数据 --> <ul> <c:forEach var="data" items="${currentPageData}"> <li>${data}</li> </c:forEach> </ul> <!-- 显示分页导航栏 --> <div> <%-- 上一页链接 --%> <% if (currentPage > 1) { %> <a href="?page=<%= currentPage - 1 %>">上一页</a> <% } %> <%-- 分页数字链接 --%> <% for (int i = 1; i <= totalPages; i++) { %> <a href="?page=<%= i %>"><%= i %></a> <% } %> <%-- 下一页链接 --%> <% if (currentPage < totalPages) { %> <a href="?page=<%= currentPage + 1 %>">下一页</a> <% } %> </div> </body> </html> ``` 这个示例使用了 JSTL 标签库来简化代码,使用 Java 代码模拟了从数据库中获取数据的过程,并实现了分页功能。 你可以将以上代码保存为一个 `.jsp` 文件,部署到你的 Java Web 服务器上运行,然后通过访问对应的 URL 地址来查看分页效果。 希望这个示例能够帮助到你!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值