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

[版本 3.x] 求助,分页类里面的$offset是怎么来的?

[复制链接]
发表于 2015-7-9 16:23:31 | 显示全部楼层 |阅读模式
我是个菜鸟,我一直弄不明白$offset它的执行流程……

是这样的,先是一个文章控制器里面有个index方法:
PHP复制代码
 
  /**
     * 显示文章列表
     * @return void
     */

    public function index($offset = '')
    {
        $config['base_url'] = site_url('admin/article/index/');
        $config['total_rows'] = $this->article_model->get_article_sum(); //文章总条数
        $config['per_page'] = 2;     //每页显示多少条记录
        $config['uri_segment'] = 4;
 
        $this->pagination->initialize($config); //这样做后究竟发生了什么事情?
 
        $data['links'] = $this->pagination->create_links();
       
        $limit = $config['per_page'];
        // $offset = $this->uri->segment(4);
        $data['article_list'] = $this->article_model->get_per_page($limit, $offset);
       
        $this->load->view('list.html', $data);
    }
 
复制代码


article_model里的get_per_page方法就是一个limit语句
PHP复制代码
 
  /**
     * 获取某一页的文章
     * @return array 至少是二维的吧
     */

    public function get_per_page($limit, $offset)
    {
        return $this->db->limit($limit, $offset)->get(self::TABLE)->result_array();
    }
 
复制代码


我的问题是 $offset是怎么来的?$config['uri_segment'] 难道它会自动把值付给 $offset,还是说CI检测到$offset为空时会去自动截取uri的最后一段?
分页跑起来貌似也没问题,但我一直都不明白,望大家指点一二啊。

发表于 2015-7-9 16:27:42 | 显示全部楼层
数据库获取的呀  $this->db->limit($limit, $offset)
发表于 2015-7-9 18:03:44 | 显示全部楼层
看你的index函数定义,有一个$offset参数:
PHP复制代码
 
public function index($offset = '')
 
复制代码


当你访问页面: admin/article/index/1 时,会自动将1赋值给$offset

可以看下CodeIgniter.php中的相关代码:
PHP复制代码
 
$params = array_slice($URI->rsegments, 2);
call_user_func_array(array(&$CI, $method), $params);
 
复制代码
 楼主| 发表于 2015-7-9 22:40:49 | 显示全部楼层
aneasystone 发表于 2015-7-9 18:03
看你的index函数定义,有一个$offset参数:

好的,谢谢。我去追下……

本版积分规则