在Codeigniter Pagination生成的页面链接中,始终选择第1页

时间:2012-05-03 20:41:42

标签: php codeigniter pagination

我要把头发拉过来了!

在我的页面初始加载分页(通过CI)时,所有行都会显示,即使我只想要3.但是在点击其他页面时,它工作正常(显示正确的行),但是即使我点击第2,3页等,也总是“被选中”(不可点击)

有什么想法吗?

我的 CONTROLLER

function album($type, $album_id, $album_name) {

    $this->load->library('pagination');
    $config['base_url'] = base_url("photo_store/album/$type/$album_id/$album_name/");
    $config['total_rows'] = $this->Media_model->get_photos($album_id, 'display_date DESC', NULL, NULL, TRUE);
    $config['per_page'] = 3;
    $this->pagination->initialize($config);
    $album_photos = $this->Media_model->get_photos($album_id, 'display_date DESC', $config['per_page'], $this->uri->segment(6), FALSE);

    $this->_load_view(array(
        /* some other variables here */
        'album_photos' => $album_photos
    ));

)

private function _load_view($more_data) {
    $data = array_merge($more_data, array( /* some other variables here */ ));
    $this->load->view('template', $data);
}

我的模型

public function get_photos($album_id=NULL, $order_by='display_date DESC', $limit=NULL, $offset=NULL, $count=FALSE) {

    $result = array();
    $query = $this->db->select('medium.*')->join('medium', "$this->item.medium_id = medium.id", 'inner')->order_by($order_by);
    $limit = $limit ? $limit : '0';
    $offset = $offset ? $offset : '0';
    if ($limit!=='0' && $offset!=='0') {
        $query->limit($limit, $offset);
    }

    if ($album_id) { $result = $query->get_where($this->item, array('album_id' => $album_id)); }
    else { $result = $query->get($this->item); }

    if ($count){ return $result->num_rows(); }
    else { return $result->result(); }

}

我的视图

foreach ($album_photos as $photo) {
    //display photos here
}
echo $this->pagination->create_links();

5 个答案:

答案 0 :(得分:3)

您可以将其添加到配置数组中,以便分页知道在哪里找到当前页面:

$config['uri_segment'] = 4;

答案 1 :(得分:1)

我相信问题的一部分就在这里:

if ($limit!=='0' && $offset!=='0') {
    $query->limit($limit, $offset);
}

由于您的语句没有else部分,因此查询永远不会限制在该第一页。

我建议您将该代码更改为

if ($limit!=='0') {
    $query->limit($limit, $offset);
}

甚至只是

$query->limit($limit, $offset);

因为$limit理论上永远不应该是null0,因为您已将其设置为3。除非设置$offset,否则0应为null,以便您可以在模型函数中将{{1}}替换为{{1}},

答案 2 :(得分:1)

如果网址中传递了超过3个uri细分,则所选的分页页面将无法正确显示,它将始终突出显示第一页。

分页正在运行,但所选页面未正确显示。

解决这个问题,解决方案:

转到 Pagination.php 文件,该文件位于 system-> libraries-> Pagination.php

只需设置

即可
var $uri_segment = 4;// or 5 or 6;

它会起作用。

答案 3 :(得分:0)

您可以将其添加到配置数组中,以便分页知道在哪里找到当前页面:

$config['uri_segment'] = 4; // Your appropriate uri segment: 5 or 6

答案 4 :(得分:0)

尝试对控制器进行编码,如下所示:

public function index($page=''){
//...
$page = ($page!='')? $page : 0;
$config["cur_page"] = $page;

//...

}