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

CI框架简单分页类用法示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-13 11:04:10 浏览: 评论:0 

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

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

控制器里调用

  1. $config['page_url']  
  2. 'about/science';  
  3. $config['page_size'] = $pagesize;  
  4. $config['rows_num'] = $num_rows;  
  5. $config['page_num'] = $page;  
  6. $this->load->library('Custom_pagination');  
  7. $this->custom_pagination->init($config);  
  8. echo $this->custom_pagination->create_links();  
  9.  
  10. <?php  
  11. class page{  
  12.      
  13.   public $page//当前页  
  14.   public $pagenum// 页数  
  15.   public $pagesize// 每页显示条数  
  16.   public function __construct($count$pagesize){  
  17.     $this->pagenum = ceil($count/$pagesize);  
  18.     $this->pagesize = $pagesize;  
  19.     $this->page =(isset($_GET['p'])&&$_GET['p']>0) ? intval($_GET['p']) : 1;  
  20.   }  
  21.   /**  
  22.    * 获得 url 后面GET传递的参数  
  23.    */  
  24.   public function getUrl(){    
  25.     $url = 'index.php?'.http_build_query($_GET);  
  26.     $url = preg_replace('/[?,&]p=(\w)+/','',$url);  
  27.     $url .= (strpos($url,"?") === false) ? '?' : '&';  
  28.     return $url;  
  29.   }  
  30.   /**  
  31.    * 获得分页HTML  
  32.    */ 
  33.   public function getPage(){  
  34.     $url = $this->getUrl();  
  35.     $start = $this->page-5;  
  36.     $start=$start>0 ? $start : 1;   
  37.     $end  = $start+9;  
  38.     $end = $end<$this->pagenum ? $end : $this->pagenum;  
  39.     $pagestr = '';  
  40.     if($this->page>5){  
  41.       $pagestr = "<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=1".">首页</a> ";  
  42.     }  
  43.     if($this->page!=1){  
  44.       $pagestr.= "<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".($this->page-1).">上一页</a>";  
  45.     }  
  46.        
  47.     for($i=$start;$i<=$end;$i++){  
  48.       $pagestr.= "<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".$i.">".$i."</a> ";             
  49.     }  
  50.     if($this->page!=$this->pagenum){  
  51.       $pagestr.="<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".($this->page+1).">下一页</a>";  
  52.          
  53.     }  
  54.     if($this->page+5<$this->pagenum){  
  55.       $pagestr.="<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".$this->pagenum.">尾页</a> ";  
  56.     }  
  57.     return $pagestr;    
  58.   }  
  59.      
  60. }  
  61. // 测试代码  
  62. $page = new page(100,10);  
  63. $str=$page->getPage();  
  64. echo $str;  
  65. ?>

Tags: CI框架分页类

分享到: