当前位置:首页 > CMS教程 > 其它CMS > 列表

CI框架简单分页类

发布:smiling 来源: PHP粉丝网  添加日期:2022-07-02 08:40:03 浏览: 评论:0 

本文实例讲述了CI框架简单分页类用法,分享给大家供大家参考,具体如下:

  1. /**  
  2.  
  3.  *  
  4.  
  5.  * 关于 页码有效性的判断需要加在 控制器中判断,即当页码数<1或者>总页数  
  6.  
  7.  *  
  8.  
  9.  */ 
  10.  
  11. class Custom_pagination  
  12.  
  13. {  
  14.  
  15.   var $page_url = ''//分页目标URL  
  16.  
  17.   var $page_size = 10; //每一页行数  
  18.  
  19.   var $page_num = 1;//页码  
  20.  
  21.   var $rows_num'';//数据总行数  
  22.  
  23.   var $links_num= 3;//选中链接前后的链接数,必须大于等于1  
  24.  
  25.    
  26.  
  27.   var $anchor_class'';//链接样式类  
  28.  
  29.   var $current_class'';//当前页样式类  
  30.  
  31.   var $full_tag_open'';//分页开始标签  
  32.  
  33.   var $full_tag_close'';//分页结束标签  
  34.  
  35.   var $info_tag_open'';  
  36.  
  37.   var $info_tag_close' ';  
  38.  
  39.   var $first_tag_open'';  
  40.  
  41.   var $first_tag_close' ';  
  42.  
  43.   var $last_tag_open' ';  
  44.  
  45.   var $last_tag_close'';  
  46.  
  47.   var $cur_tag_open' <strong>';  
  48.  
  49.   var $cur_tag_close'</strong>';  
  50.  
  51.   var $next_tag_open' ';  
  52.  
  53.   var $next_tag_close' ';  
  54.  
  55.   var $prev_tag_open' ';  
  56.  
  57.   var $prev_tag_close'';  
  58.  
  59.   var $num_tag_open' ';  
  60.  
  61.   var $num_tag_close'';  
  62.  
  63.    
  64.  
  65.   public function __construct($params = array())  
  66.  
  67.   {  
  68.  
  69.     if (count($params) > 0)  
  70.  
  71.     {  
  72.  
  73.       $this->init($params);  
  74.  
  75.     }  
  76.  
  77.   }  
  78.  
  79.     
  80.  
  81.   function init($params = array()) //初始化数据  
  82.  
  83.   {  
  84.  
  85.     if (count($params) > 0)  
  86.  
  87.     {  
  88.  
  89.       foreach ($params as $key => $val)  
  90.  
  91.       {  
  92.  
  93.         if (isset($this->$key))  
  94.  
  95.         {  
  96.  
  97.           $this->$key = $val;  
  98.  
  99.         }  
  100.  
  101.       }  
  102.  
  103.     }  
  104.  
  105.   }  
  106.  
  107.     
  108.  
  109.   function create_links()  
  110.  
  111.   {  
  112.  
  113.     ///////////////////////////////////////////////////////  
  114.  
  115.     //准备数据  
  116.  
  117.     ///////////////////////////////////////////////////////  
  118.  
  119.     $page_url = $this->page_url;  
  120.  
  121.     $rows_num = $this->rows_num;  
  122.  
  123.     $page_size = $this->page_size;  
  124.  
  125.     $links_num = $this->links_num;  
  126.  
  127.    
  128.  
  129.     if ($rows_num == 0 OR $page_size == 0)  
  130.  
  131.     {  
  132.  
  133.       return '';  
  134.  
  135.     }  
  136.  
  137.    
  138.  
  139.     $pages = intval($rows_num/$page_size);  
  140.  
  141.     if ($rows_num % $page_size)  
  142.  
  143.     {  
  144.  
  145.       //有余数pages+1  
  146.  
  147.       $pages++;  
  148.  
  149.     };  
  150.  
  151.     $page_num = $this->page_num < 1 ? '1' : $this->page_num;  
  152.  
  153.    
  154.  
  155.     $anchor_class = '';  
  156.  
  157.     if($this->anchor_class !== '')  
  158.  
  159.     {  
  160.  
  161.       $anchor_class = 'class="'.$this->anchor_class.'" ';  
  162.  
  163.     }  
  164.  
  165.    
  166.  
  167.     $current_class = '';  
  168.  
  169.     if($this->current_class !== '')  
  170.  
  171.     {  
  172.  
  173.       $current_class = 'class="'.$this->current_class.'" ';  
  174.  
  175.     }  
  176.  
  177.     if($pages == 1)  
  178.  
  179.     {  
  180.  
  181.       return '';  
  182.  
  183.     }  
  184.  
  185.     if($links_num < 0)  
  186.  
  187.     {  
  188.  
  189.       return '- -!links_num必须大于等于0';  
  190.  
  191.     }  
  192.  
  193.     ////////////////////////////////////////////////////////  
  194.  
  195.     //创建链接开始  
  196.  
  197.     ////////////////////////////////////////////////////////  
  198.  
  199.     $output = $this->full_tag_open;  
  200.  
  201.     $output .= $this->info_tag_open.'共'.$rows_num.'条数据 第 '.$page_num.'/'.$pages.' 页'.$this->info_tag_close;  
  202.  
  203.     //首页  
  204.  
  205.     if($page_num > 1)  
  206.  
  207.     {  
  208.  
  209.       $output .= $this->first_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url).'" rel="external nofollow" >首页</a>'.$this->first_tag_close;  
  210.  
  211.     }  
  212.  
  213.     //上一页  
  214.  
  215.     if($page_num > 1)  
  216.  
  217.     {  
  218.  
  219.       $n = $page_num - 1;  
  220.  
  221.       $output .= $this->prev_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$n).'" rel="external nofollow" rel="external nofollow" >上一页</a>'.$this->prev_tag_close;  
  222.  
  223.     }  
  224.  
  225.     //pages  
  226.  
  227.     for($i=1;$i<=$pages;$i++)  
  228.  
  229.     {  
  230.  
  231.       $pl = $page_num - $links_num < 0 ? 0 : $page_num - $links_num;  
  232.  
  233.       $pr = $page_num + $links_num > $pages ? $pages : $page_num + $links_num;  
  234.  
  235.       //判断链接个数是否太少,举例,假设links_num = 2,则链接个数不可少于 5 个,主要是 当page_num 等于 1, 2 和 n,n-1的时候  
  236.  
  237.       if($pr < 2 * $links_num + 1)  
  238.  
  239.       {  
  240.  
  241.         $pr = 2 * $links_num + 1;  
  242.  
  243.       }  
  244.  
  245.       if($pl > $pages-2 * $links_num)  
  246.  
  247.       {  
  248.  
  249.         $pl = $pages - 2 * $links_num;  
  250.  
  251.       }  
  252.  
  253.       if($i == $page_num)  
  254.  
  255.       {  //current page  
  256.  
  257.         $output .= $this->cur_tag_open.'<span '.$current_class.' >'.$i.'</span>'.$this->cur_tag_close;  
  258.  
  259.       }else if($i >= $pl && $i <= $pr)  
  260.  
  261.       {  
  262.  
  263.         $output .= $this->num_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$i).'" rel="external nofollow" >'.$i.'</a>'.$this->num_tag_close;  
  264.  
  265.       }  
  266.  
  267.     }  
  268.  
  269.     //下一页  
  270.  
  271.     if($page_num < $pages)  
  272.  
  273.     {  
  274.  
  275.       $n = $page_num + 1;  
  276.  
  277.       $output .= $this->next_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$n).'" rel="external nofollow" rel="external nofollow" >下一页</a>'.$this->next_tag_close;  
  278.  
  279.     }  
  280.  
  281.     //末页  
  282.  
  283.     if($page_num < $pages)  
  284.  
  285.     {  
  286.  
  287.       $output .= $this->last_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$pages).'" rel="external nofollow" >末页</a>'.$this->last_tag_close;  
  288.  
  289.     }  
  290.  
  291.    
  292.  
  293.     $output.=$this->full_tag_close;  
  294.  
  295.     return $output;  
  296.  
  297.   }  
  298.  

控制器里调用

  1. $config['page_url']  
  2.  
  3. 'about/science';  
  4.  
  5. $config['page_size'] = $pagesize;  
  6.  
  7. $config['rows_num'] = $num_rows;  
  8.  
  9. $config['page_num'] = $page;  
  10.  
  11. $this->load->library('Custom_pagination');  
  12.  
  13. $this->custom_pagination->init($config);  
  14.  
  15. echo $this->custom_pagination->create_links(); 
  16.  
  17.  
  18. <?php  
  19.  
  20. class page{  
  21.  
  22.      
  23.  
  24.   public $page//当前页  
  25.  
  26.   public $pagenum// 页数  
  27.  
  28.   public $pagesize// 每页显示条数  
  29.  
  30.   public function __construct($count$pagesize){  
  31.  
  32.     $this->pagenum = ceil($count/$pagesize);  
  33.  
  34.     $this->pagesize = $pagesize;  
  35.  
  36.     $this->page =(isset($_GET['p'])&&$_GET['p']>0) ? intval($_GET['p']) : 1;  
  37.  
  38.   }  
  39.  
  40.   /**  
  41.  
  42.    * 获得 url 后面GET传递的参数  
  43.  
  44.    */  
  45.  
  46.   public function getUrl(){    
  47.  
  48.     $url = 'index.php?'.http_build_query($_GET);  
  49.  
  50.     $url = preg_replace('/[?,&]p=(\w)+/','',$url);  
  51.  
  52.     $url .= (strpos($url,"?") === false) ? '?' : '&';  
  53.  
  54.     return $url;  
  55.  
  56.   }  
  57.  
  58.   /**  
  59.  
  60.    * 获得分页HTML  
  61.  
  62.    */ 
  63.  
  64.   public function getPage(){  
  65.  
  66.     $url = $this->getUrl();  
  67.  
  68.     $start = $this->page-5;  
  69.  
  70.     $start=$start>0 ? $start : 1;   
  71.  
  72.     $end  = $start+9;  
  73.  
  74.     $end = $end<$this->pagenum ? $end : $this->pagenum;  
  75.  
  76.     $pagestr = '';  
  77.  
  78.     if($this->page>5){  
  79.  
  80.       $pagestr = "<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=1".">首页</a> ";  
  81.  
  82.     }  
  83.  
  84.     if($this->page!=1){  
  85.  
  86.       $pagestr.= "<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".($this->page-1).">上一页</a>";  
  87.  
  88.     }  
  89.  
  90.        
  91.  
  92.     for($i=$start;$i<=$end;$i++){  
  93.  
  94.       $pagestr.= "<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".$i.">".$i."</a> ";             
  95.  
  96.     }  
  97.  
  98.     if($this->page!=$this->pagenum){  
  99.  
  100.       $pagestr.="<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".($this->page+1).">下一页</a>";  
  101.  
  102.          
  103.  
  104.     }  
  105.  
  106.     if($this->page+5<$this->pagenum){  
  107.  
  108.       $pagestr.="<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".$this->pagenum.">尾页</a> ";  
  109.  
  110.     }  
  111.  
  112.     return $pagestr;    
  113.  
  114.   }  
  115.  
  116.      
  117.  
  118. }  
  119.  
  120. // 测试代码  
  121.  
  122. $page = new page(100,10);  
  123.  
  124. $str=$page->getPage();  
  125.  
  126. echo $str;  
  127.  
  128. ?>

Tags: CI框架分页类

分享到:

相关文章