0

我已经在近十个模块中使用了分页库,没有问题,但在最后一个(也是最重要的)中失败了。

我这部分的路线是:

$route['candidate/sort/(:any)/(:any)/page/(:num)'] = 'candidate/sort/$1/$2/$3';

我的控制器

public function sort($type, $id, $page = 1) {
    /* Load Config */
    $data = $this->data;
    $data['sub_active'] = 'candidate';
    $data['type'] = $type;
    /* Get Candidates */
    $total = $this->candidates->getTotal($type, $id);
    if(($this->limit >= $total) && ($page > 1)) {
        $data['candidates'] = $this->candidates->getCandidates(1, $this->limit, $type, $id);
    }elseif(((($this->limit * $page) - $this->limit) >= $total) && ($page > 1)) {
        $data['candidates'] = $this->candidates->getCandidates(ceil($total / $this->limit), $this->limit, $type, $id);
    }else{
        $data['candidates'] = $this->candidates->getCandidates($page, $this->limit, $type, $id);
    }
    /* Pagination */
    $this->load->library('pagination');
    # Config Pagination
    $data['cms']['tables']['total_rows'] = $total;
    $data['cms']['tables']['per_page'] = $this->limit; 
    $data['cms']['tables']['first_url'] = base_url($data['sub_active'].'/sort'.'/'.$type.'/'.$id);
    $data['cms']['tables']['base_url'] = base_url($data['sub_active'].'/sort'.'/'.$type.'/'.$id.'/page');
    $data['page'] = $page;
    $data['total_pages'] = ceil($total / $this->limit);
    $data['total'] = $total;
    # Initialize Pagination
    $this->pagination->initialize($data['cms']['tables']); 
    $data['pagination'] = $this->pagination->create_links();
    /* Display Template */
    $this->twig->display('pages/list_candidate.htm', $data);
}

基本第一个 url =myweb.com/candidate/sort/$type/$id和基本 url =myweb.com/candidate/sort/$type/$id/page

但是分页不起作用,它总是在同一页(本例为第 1 页)。我在其他控制器中使用相同的模式,它工作正常,只是失败了。

提前致谢。

4

2 回答 2

3

我终于找到了答案:

$config['uri_segment'] = 6;

那是因为 codeigniter 不能很好地检测 URL。

于 2012-12-22T18:13:45.877 回答
1

很好,我很高兴你找到了 Tunnecino 的答案!但我认为它需要进一步解释,为什么

根据我们精彩的 CI 用户指南,这是我们确定 uri_segment 的方法,以免再次犯同样的错误 :)

$this->uri->segment(n)

允许您检索特定段。其中 n 是您要检索的段号。段从左到右编号。例如,如果您的完整 URL 是这样的:

http://example.com/index.php/news/local/metro/crime_is_up

段号是这样的:

1.news

2.local

3.metro

4.crime_is_up

默认情况下,如果段不存在,该函数将返回 FALSE(布尔值)。如果段丢失,则有一个可选的第二个参数允许您设置自己的默认值。例如,这将告诉函数在失败时返回数字零:

$product_id = $this->uri->segment(3, 0);
于 2013-06-06T13:48:28.063 回答