Не могли бы вы помочь мне с моей проблемой разбивки на страницы в 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(); ?>
Я был бы так рад, если бы вы могли помочь и заранее спасибо






Вы не можете использовать функцию 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); // Produces: LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
Здесь можно найти дополнительную ссылку Ограничение CI
Также в качестве побочного примечания, глядя на ваш код, переменным $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;
}
Я обновил коды, но, к сожалению, ничего не изменилось
Я обновил код, пожалуйста, проверьте их и дайте мне знать, работает ли он сейчас
$start = isset($_GET['start']) ? $_GET['start'] : 0; $book_list = $this->Books_model->list_books($start, $config['per_page']); Этот тоже не работал
Вы также добавили $config['page_query_string'] = TRUE;?
Да, я добавил
Можете ли вы опубликовать обновление своего кода, чтобы я мог видеть все изменения?
Вы внесли изменения в код контроллера, но не в том месте. Я обновлю свой ответ, чтобы показать полное изменение
А как насчет $start = isset($_GET['start']) ? $_GET['start'] : 0;?
К сожалению, он все еще не работает: / Я получаю все данные с первой страницы, и когда я нажимаю «2» или «3», все, что у меня есть, - это снова та же страница
Я обновил код модели, проверил и посмотрю, работает ли
Игорь, спасибо за все твои усилия, но проблема все еще есть. Код выглядит солидно и даже работает в другом проекте codeigniter. С обновлением о пределе, которое вы посоветовали, я вижу первую запись на странице, но когда я нажимаю '2' или '3', все, что я вижу, это снова та же запись
Попробуйте добавить еще одну строку в массив конфигурации разбивки на страницы: $config['query_string_segment'] = 'start';
Без изменений. Кстати, когда я var_dump(uri_string());, он возвращает пустую строку как C:\wamp64\www\myLibrary\application\controllers\Books.php:10:string '' (length=0)
Проблема решена окончательно! Мне потребовалось многое изменить, спасибо за вашу помощь, Игорь!
$config['base_url'] = 'http://example.com/controller/index/page/'
Попробуйте добавить индекс как имя метода config ['base_url]. так что всякий раз, когда создается ваш URL-адрес страницы, он содержит имя метода. это происходит из-за автоматического вызова метода индекса, т.е. нам не нужно указывать имя метода, но в URL-адресе разбивки на страницы мы должны передать параметр смещения, мы должны использовать полный URL-адрес.
Большое спасибо! Теперь я не получаю ошибку 404, но данные все еще не ограничены
Большое спасибо! Я изменил базовый URL, как вы сказали, и ошибка 404 устранена. Также обновлены другие коды, но данные по-прежнему не ограничены