kinwyb 发表于 2013-5-30 11:03:31

一个简单的分页model

本帖最后由 kinwyb 于 2013-5-30 11:19 编辑

直接写的一个简单的分页模型
主要功能是传入一个查询数组,进行分页返回一个分页后的数组,返回的数组包括,上一页,下一页,总数据条数,分页页数,当前页的内容。

class Page_model extends CI_model
{
    //private私有只能在类内部使用,不能直接在外部调用
    private $nowpage; //当前页面
    private $uppage; //上一页
    private $downpage; //下一页
    private $pagearray; //分页数组
    private $row; //数据记录条数
    private $pagerow; //每页条数
    private $pageall=1; //总页数
    private $pro; //页码条数
    private $out=array("where","like");
    private $get;
   
    function __construct()
    {
      parent::__construct();
      $this->load->database();
    }
   
    /**
   * 分页开始方法
   * @param unknown_type $sql SQL语句
   * @param unknown_type $nowpage 当前页
   * @param unknown_type $pagerow 每页条数
   */
    public function pagestart($sql,$nowpage=1,$pagerow=10,$pro=5)
    {
      $this->pro=$pro;
      $nowpage>1?$this->nowpage=$nowpage:$this->nowpage=1;
      $this->pagerow=$pagerow;
      if(empty($sql['get']))
            return false;
      else
      {
            $this->get=$sql['get'];
            unset($sql['get']);
      }
      foreach($sql as $key => $value)
      {
            if($key =='join')
                foreach($sql[$key] as $value)
                  call_user_func_array(array($this->db,$key),$value);
            elseif(is_array($value) AND !in_array($key,$this->out))
                call_user_func_array(array($this->db,$key),$value);
            else
                $this->db->$key($value);
      }
      $this->row=$this->db->get($this->get)->num_rows();
      $this->_page_num();
      $this->_pagenow($sql);
      $this->pagearray['allrow']=$this->row;
      return $this->pagearray;
    }
   
    /**_page_func()函数用于输出分页页数
   * @param $rows数据条数
    * @param $page_l每页数据条数
    * @return $_page_num页数
    */
    private function _page_num()
    {
      //数据页数
      /*ceil -- 进一法取整
         float ceil ( float value )
      返回不小于 value 的下一个整数,value 如果有小数部分则进一位。
      */
      if($this->row>0)
            $this->pageall=ceil($this->row/$this->pagerow);
      if($this->nowpage>$this->pageall)
            $this->nowpage=$this->pageall;
    }
   
    /**
   * 分页主方法
   */
    private function _pagenow($sql)
    {
      $start=($this->nowpage-1)*$this->pagerow;
      $this->db->limit($this->pagerow,$start);
      foreach($sql as $key => $value)
      {
            if($key =='join')
                foreach($sql[$key] as $value)
                  call_user_func_array(array($this->db,$key),$value);
            elseif(is_array($value) AND !in_array($key,$this->out))
                call_user_func_array(array($this->db,$key),$value);
            else
                $this->db->$key($value);
      }
      $this->pagearray['row']=$this->db->get($this->get)->result_array();
      $i=$this->nowpage;
      if($i-2<1)//把当前页放在中间,当前页之前显示2条
            $i=1;
      else
            $i=$i-2;
      if(($i+$this->pro)>$this->pageall)
            $top=$this->pageall;
      else
            $top=$this->pro+$i;
      //循环出输出页数
      for(;$i<=$top;$i++)
            $this->pagearray['page'][]=$i;
      //获取上一页
      if(($this->nowpage-1)<1)
            $this->pagearray['uppage']=1;
      else
            $this->pagearray['uppage']=$this->nowpage-1;
      //获取下一页
      if(($this->nowpage+1)>$this->pageall)
            $this->pagearray['downpage']=$this->pageall;
      else
            $this->pagearray['downpage']=$this->nowpage+1;
      //获取首页
      $this->pagearray['first']=1;
      //获取末页
      $this->pagearray['last']=$this->pageall;
      $this->pagearray['nowpage']=$this->nowpage;
    }
}


使用方法

$this->load->model('page_model',"page");
      $sql=array(
                "select"=>"allarc.id,title,update,writer,name,addtable",
                "order_by"=>"id",
                "where"=>array("id",1),
                "join"=>array("join1"=>array("arctype","typeid=arctype.id"),),
                "get"=>'allarc',
      );
$result=$this->page->pagestart($sql,$page);


1切是如斯旳不 发表于 2013-10-23 13:28:50

这是啥子框架噻!

kinwyb 发表于 2013-10-25 15:53:35

CI框架呀

1切是如斯旳不 发表于 2013-10-25 16:04:04

好吧,顶你一个..哈哈...回头你教我这个.CI那个分页不太好.

shan199 发表于 2013-11-9 23:07:54

刚学习CI,先收藏起来备用。

wait10000y 发表于 2014-2-19 13:49:04

:D 看看

小怪兽 发表于 2014-3-12 14:43:20

好复杂的样子~好好学习一下~

guyan 发表于 2014-12-31 16:23:40

这个 框架怎么用啊 求指点339305101我QQ

yucongwu 发表于 2015-1-22 08:54:22

做一个记录在说。
页: [1]
查看完整版本: 一个简单的分页model