用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4877|回复: 8
收起左侧

[其它 Other] 一个简单的分页model

[复制链接]
发表于 2013-5-30 11:03:31 | 显示全部楼层 |阅读模式
本帖最后由 kinwyb 于 2013-5-30 11:19 编辑

直接写的一个简单的分页模型
主要功能是传入一个查询数组,进行分页返回一个分页后的数组,返回的数组包括,上一页,下一页,总数据条数,分页页数,当前页的内容。
PHP复制代码
 
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;
    }
}
 
复制代码


使用方法
PHP复制代码
 
$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);
 
复制代码


发表于 2013-10-23 13:28:50 | 显示全部楼层
这是啥子框架噻!
 楼主| 发表于 2013-10-25 15:53:35 | 显示全部楼层
CI框架呀
发表于 2013-10-25 16:04:04 | 显示全部楼层
好吧,顶你一个..哈哈...回头你教我这个.CI那个分页不太好.
发表于 2013-11-9 23:07:54 | 显示全部楼层
刚学习CI,先收藏起来备用。
发表于 2014-2-19 13:49:04 | 显示全部楼层
看看
发表于 2014-3-12 14:43:20 | 显示全部楼层
好复杂的样子~好好学习一下~
发表于 2014-12-31 16:23:40 | 显示全部楼层
这个 框架怎么用啊 求指点339305101我QQ
发表于 2015-1-22 08:54:22 | 显示全部楼层
做一个记录在说。

本版积分规则