wangaibo168 发表于 2014-4-15 16:13:59

简洁大方的通用分页类

先上图


/application/libraries/page_list.php

<?php if( ! defined('BASEPATH')) die('No Access');

/**
* 分页类
*
* @author wangaibo<wangaibo@boqii.net>
* @version 1.0.0
* @link http://www.du52.com/text.php?id=551
*/
class Page_list {

    /**
   * 总数据
   * @var int
   */
    private $total;
    /**
   * 每页显示数据
   * @var int
   */
    private $size;
    /**
   * 当前页数
   * @var int
   */
    private $page;
    /**
   * 页数列表左右页数
   * @var int
   */
    private $len;

    /**
   * 总页数
   * @var int
   */
    private $page_total;
    /**
   * 页码列表
   * @var array
   */
    private $page_list;

    /**
   * 基准地址
   * @var string
   */
    private $base_url;
    /**
   * 替换标志
   * @var string
   */
    private $place;
    /**
   * 分页样式
   * @var string
   */
    private $style;


    /**
   * 构造函数
   *
   * @param array $config 配置数组
   */
    public function __construct($config = array()){
      // 初始化默认值
      $this->total = 0;
      $this->size = 20;
      $this->page = 1;
      $this->len = 4;
      $this->page_total = 1;
      $this->page_list = array();
      $this->base_url = '?page=-page-';
      $this->place = '-page-';
      $this->style = $this->get_default_style();
      $this->initialize($config);
    }

    /**
   * 初始化分页
   *
   * @param array $config 配置数组
   */
    public function initialize($config = array()){
      // 取得配置值
      if(is_array($config)){
            if(array_key_exists('total', $config)) $this->total = @intval($config['total']);
            if(array_key_exists('size', $config)) $this->size = @intval($config['size']);
            if(array_key_exists('page', $config)) $this->page = @intval($config['page']);
            if(array_key_exists('len', $config)) $this->len = @intval($config['len']);
            if(array_key_exists('base_url', $config)) $this->base_url = @strval($config['base_url']);
            if(array_key_exists('place', $config)) $this->place = @strval($config['place']);
            if(array_key_exists('style', $config)) $this->style = @strval($config['style']);
      }
      // 修正值
      if($this->total<0) $this->total = 0;
      if($this->size<=0) $this->size = 20;
      if($this->page<=0) $this->page = 1;
      if($this->len<=0) $this->len = 4;
      // 执行分页算法
      $this->page_total = ceil($this->total/$this->size);
      if($this->page_total<=0) $this->page_total = 1;
      if($this->page>$this->page_total) $this->page = $this->page_total;
      if($this->page-$this->len>=1){
            for($i=$this->len; $i>0; $i--){
                $this->page_list[] = $this->page - $i;
            }
      }else{
            for($i=1; $i<$this->page; $i++){
                $this->page_list[] = $i;
            }
      }
      $this->page_list[] = $this->page;
      if($this->page+$this->len<=$this->page_total){
            for($i=1; $i<=$this->len; $i++){
                $this->page_list[] = $this->page + $i;
            }
      }else{
            for($i=$this->page+1; $i<=$this->page_total; $i++){
                $this->page_list[] = $i;
            }
      }
    }

    /**
   * 默认分页样式
   *
   * @return string
   */
    public function get_default_style(){
      $style = '<style type="text/css">';
      $style .= '        div.page_list { margin:0;padding:0;overflow:hidden;zoom:1;}';
      $style .= ' div.page_list a {display:block;float:left;height:20px;line-height:21px; font-size:13px;font-weight:normal;font-style:normal;color:#133DB6;text-decoration:none;margin:0 3px;padding:0 7px;overflow;zoom:1;}';
      $style .= ' div.page_list a.page_list_act { font-size:13px;padding:0 6px;}';
      $style .= ' div.page_list a:link, div.page_list a:visited { background:#FFF;border:1px #EEE solid;text-decoration:none;}';
      $style .= ' div.page_list a:hover, div.page_list a:active { background:#EEE;text-decoration:none;}';
      $style .= ' div.page_list strong { display:block;float:left;height:20px;line-height:21px;font-size:13px;font-weight:bold;font-style:normal;color:#000;margin:0 3px;padding:0 8px;overflow:hidden;zoom:1;}';
      $style .= ' </style>';
      return $style;
    }

    /**
   * 是否是第一页
   *
   * @return bool
   */
    public function is_first_page(){
      return $this->page == 1;
    }

    /**
   * 获取第一页页码
   *
   * @return int
   */
    public function get_first_page(){
      return 1;
    }

    /**
   * 是否是最后一页
   *
   * @return bool
   */
    public function is_last_page(){
      return $this->page == $this->page_total;
    }

    /**
   * 获取最后一页页码
   *
   * @return int
   */
    public function get_last_page(){
      return $this->page_total;
    }

    /**
   * 是否存在上一页
   *
   * @return bool
   */
    public function has_prev_page(){
      return $this->page > 1;
    }

    /**
   * 是否存在下一页
   *
   * @return bool
   */
    public function has_next_page(){
      return $this->page < $this->page_total;
    }

    /**
   * 获取上一页页码
   *
   * @return int
   */
    public function get_prev_page(){
      return $this->has_prev_page() ? $this->page - 1 : $this->page;
    }

    /**
   * 获取下一页页码
   *
   * @return int
   */
    public function get_next_page(){
      return $this->has_next_page() ? $this->page + 1 : $this->page;
    }

    /**
   * 获取当前页页码
   *
   * @return int
   */
    public function get_curr_page(){
      return $this->page;
    }

    /**
   * 获取总数据数
   *
   * @return int
   */
    public function get_total(){
      return $this->total;
    }

    /**
   * 获取每页显示数据数
   *
   * @return int
   */
    public function get_size(){
      return $this->size;
    }

    /**
   * 获取总页数
   *
   * @return int
   */
    public function get_total_page(){
      return $this->page_total;
    }

    /**
   * 构建并返回分页代码
   *
   * @param string $base_url 基准地址
   * @param string $place 替换标志
   * @param string $style 分页样式
   * @return string 分页HTML代码
   */
    public function display($base_url = '', $place = '', $style = ''){
      if($base_url==='') $base_url = $this->base_url;
      if($place==='') $place = $this->place;
      if($style==='') $style = $this->style;
      $str = $style.'<div class="page_list">';
      if( ! $this->is_first_page()){
            $str .= '<a class="page_list_act" href="'.str_replace($place, $this->get_first_page(), $base_url).'">首页</a>';
      }
      if($this->has_prev_page()){
            $str .= '<a class="page_list_act" href="'.str_replace($place, $this->get_prev_page(), $base_url).'">上一页</a>';
      }
      foreach($this->page_list as $v){
            if($v==$this->page){
                $str .= '<strong>' . $v . '</strong>';
            }else{
                $str .= '<a href="'.str_replace($place, $v, $base_url).'">'.$v.'</a>';
            }
      }
      if($this->has_next_page()){
            $str .= '<a class="page_list_act" href="'.str_replace($place, $this->get_next_page(), $base_url).'">下一页</a>';
      }
      if( ! $this->is_last_page()){
            $str .= '<a class="page_list_act" href="'.str_replace($place, $this->get_last_page(), $base_url).'">尾页</a>';
      }
      $str .= '</div>';
      return $str;
    }

}
?>




以下为测试
/application/controller/pagelist.php

<?php if( ! defined('BASEPATH')) die('No Access');

    class Pagelist extends CI_Controller {

      public function page(){
            $this->load->helper('url');
            $page = $this->input->get('page');
            $page = @intval($page);
            if($page<=0) $page = 1;
            $this->load->library('page_list',array('total'=>10000,'size'=>16,'page'=>$page));
            $pl = $this->page_list->display(site_url('pagelist/page/page/-page-'));
            $this->load->view('pagelist', array('pl' => $pl));
      }

    }
?>




/application/view/pagelist.php

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>分页测试</title>
</head>
<body>
<?php echo $pl; ?>
</body>
</html>




lkl137 发表于 2014-4-17 11:37:15

谢谢分享,学习中····

冠希丶 发表于 2014-4-23 16:46:00

我是菜鸟怎么提取数据库里的 数据进行分页

wangaibo168 发表于 2014-4-23 18:20:35

冠希丶 发表于 2014-4-23 16:46
我是菜鸟怎么提取数据库里的 数据进行分页

$this->db->select('*');
$this->db->from('tbl');
$this->db->limit($this->page_list->get_size(),$this->page_list->get_page()*$this->page_list->get_size());
$results = $this->db->get()->result_array();
var_dump($results);

chslive 发表于 2015-3-6 13:01:04

菜鸟求救,这具体怎么使用啊,我老是不成功,帮忙看看啊。


    public function index()
    {
      header("Content-type:text/html;charset=utf-8");//解决中文乱码
      $data['titleMaster']='';
      $data['title']='产品中心';
      $data['product']=$this->products_model->get_products();
      
      $f_datas = $this->db->select('*')->from('u_c_category')->where('parentid', 0)->get()->result_array();
      foreach($f_datas as $f_num => $f_data)
      {
            $f_datas[$f_num]['childrens'] = $this->db->select('*')->from('u_c_category')->where('parentid', $f_data['classid'])->get()->result_array();
      }
      
      $count=$this->products_model->getAll();
               
      $this->load->helper('url');
      $page = $this->input->get('page');   
      
      if(isset($_REQUEST['page']))
            $page=$_REQUEST['page'];
      else
            $page = 0;
               
      if($page<=0) $page = 1;
      
      $this->load->library('page_list',array('total'=>$count,'size'=>2,'page'=>$page));
      
      
      $this->db->select('*');
      $this->db->from('u_m_product');
      $this->db->limit($this->page_list->get_size(),$this->page_list->get_curr_page()*$this->page_list->get_size());
      $results = $this->db->get()->result_array();
      var_dump($results);
      $pl = $this->page_list->display(site_url('products?page=-page-'));
      
      
      
      $this->load->view('templates/header',$data);
      $this->load->view('pages/products',array('pl' => $pl,'data'=>$data,'f_datas'=>$f_datas));
      $this->load->view('templates/footer');
    }


页: [1]
查看完整版本: 简洁大方的通用分页类