Codeigniter分页给出404错误

时间:2018-07-12 08:06:55

标签: php codeigniter pagination

您能帮我解决Codeigniter中的分页问题吗?我有一个列出书的视图。我写了一些代码,现在我看到了按钮,但是内容并没有如我所愿。找不到代码出了什么问题。

这是更新的代码: 控制器:

public function index($offset=0){

    $config['base_url'] = 'http://localhost/myLibrary/books/index';
    //$config['total_rows'] = 200;
    $config['total_rows'] = $this->db->get('books')->num_rows();
    $config['per_page'] = 1;
    $config['uri_segment']= 3;
    $config['attributes'] = array('class' => 'pagination-link');
    $config['page_query_string'] = TRUE;

    $this->pagination->initialize($config); 
    $book_list = $this->Books_model->list_books();
    $genre_list= $this->Books_model->list_genres();
    $author_list= $this->Books_model->list_authors();
    $view_data = array(
        "book_list" => $book_list,
        "genre_list" => $genre_list,
        "author_list" => $author_list
    );


    $this->db->get('books', $config['per_page'], $this->uri->segment(3));
    $start = isset($_GET['start']) ? $_GET['start'] : 0;
    $book_list = $this->Books_model->list_books($start, $config['per_page']);


    $this->load->view("book_list",$view_data); 
    $this->load->library('pagination');
    $this->load->library('table');

}

型号:

public function list_books($limit = FALSE, $offset = FALSE){
    if($limit)
    {
        $this->db->limit($offset, $limit);
    }
    $list=$this->db->get("books")->result();
    return $list;
}

查看:

<?php echo $this->pagination->create_links(); ?>

如果您能提供帮助并预先感谢,我会很高兴

2 个答案:

答案 0 :(得分:0)

除非该索引函数属于默认站点控制器,否则不能将base_url()函数用作分页的base_url。

改为将行更改为此:

$config['base_url'] = site_url('controller/method/');

同样,您的数据不受限制的原因是,您将start参数作为false发送给模型

应该是:

<罢工> $data['records'] = $this->Books_model->list_books($this->uri->segment(3), $config['per_page'], $offset);

通过查看您的代码,将发送到视图文件的书籍列表存储在$ book_list变量中,因此为了限制返回的书籍数量,请在此行中进行以下更改:

$start = isset($_GET['start']) ? $_GET['start'] : 0;
$book_list = $this->Books_model->list_books($start, $config['per_page']);

然后将其添加到您的分页配置数组中:

$config['page_query_string'] = TRUE;

然后在模型函数中更改以下行:

$this->db->limit($limit, $offset);

收件人:

$this->db->limit($offset, $limit);

如CI文档中所述

  

$ this-> db-> limit(10,20); //产生:LIMIT 20、10(在MySQL中。其他数据库的语法略有不同)

在此处查看更多参考信息CI Limiting

此外,通过查看代码,$query$data['records']变量被分配了值,但从未使用或传递给视图文件,因此它们什么也不做

这是控制器中的索引方法现在的样子: 控制器:

public function index($offset=0){

    $config['base_url'] = site_url('books/index');
    //$config['total_rows'] = 200;
    $config['total_rows'] = $this->db->get('books')->num_rows();
    $config['per_page'] = 1;
    $config['uri_segment']= 3;
    $config['attributes'] = array('class' => 'pagination-link');
    $config['page_query_string'] = TRUE;

    $this->pagination->initialize($config); 
    $start = isset($_GET['start']) ? $_GET['start'] : 0;
    $book_list = $this->Books_model->list_books($start, $config['per_page']);
    $genre_list= $this->Books_model->list_genres();
    $author_list= $this->Books_model->list_authors();

    $view_data = array(
        "book_list" => $book_list,
        "genre_list" => $genre_list,
        "author_list" => $author_list
    );

    $this->load->view("book_list",$view_data); 
    $this->load->library('pagination');
    $this->load->library('table');

}

型号:

public function list_books($limit = FALSE, $offset = FALSE){
        if($limit !== FALSE)
        {
            $this->db->limit($offset, $limit);
        }
        $list=$this->db->get("books")->result();
        return $list;
    }

答案 1 :(得分:0)

$config['base_url'] = 'http://example.com/controller/index/page/'

尝试添加索引作为方法名称config ['base_url]。这样,无论何时创建分页网址,它都包含方法名称。 发生这种情况是由于自动调用了索引方法,即,我们不需要提及方法名称,但在分页网址中,我们必须传递offset参数,而必须使用完整网址。