Почему пагинация не работает при переходе по страницам?
Здравствуйте.
Помогите, пожалуйста, разобраться с задачей!
Создал CRUD приложение для работы с фильмами/сериалами через админ-панель. Все работает: добавить, отредактировать, удалить. Так, по этой ссылке выводятся все фильмы: http://kinomonster.com/all_movies для дальнейшей работы с ними.
В заключение - создал пагинацию на странице вывода всех фильмов. Пагинация выводит блок с необходимым количеством фильмов на странице (например, 20) по ссылке http://kinomonster.com/all_movies. При попытке перейти на другую (http://kinomonster.com/all_movies/20) или третью страницу (http://kinomonster.com/all_movies/40) выводит сообщение - страница не найдена.
Предполагаю, что загвоздка в роутере. Но могу ошибаться. Код, что относиться к пагинации
$route['all_movies'] = 'all_movies';
$route['all_movies/create'] = 'all_movies/create';
$route['all_movies/edit'] = 'all_movies/edit';
$route['all_movies/delete'] = 'all_movies/delete';
$route['all_movies/(:any)'] = 'all_movies/view/$1';
//$route['all_movies/'] = 'all_movies/$1';
$route['all_movies/(:any)'] = 'all_movies/$1';
контроллер
public function index() {
if(!$this->dx_auth->is_admin()) {
show_404();
}
$this->load->library('pagination');
$offset = (int) $this->uri->segment(2);
$row_count = 20;
$count = count($this->allmovies_model->getAllmovies());
$p_config['base_url'] = '/all_movies/';
$this->data['title'] = "Все киноленты";
$this->data['allmovies_data'] = $this->allmovies_model->getAllmoviesOnPage($row_count, $offset);
if($this->data['allmovies_data'] == null) {
show_404();
}
$p_config['full_tag_open'] = "<ul class='pagination'>";
$p_config['full_tag_close'] ="</ul>";
$p_config['num_tag_open'] = '<li>';
$p_config['num_tag_close'] = '</li>';
$p_config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>";
$p_config['cur_tag_close'] = "<span class='sr-only'></span></a></li>";
$p_config['next_tag_open'] = "<li>";
$p_config['next_tagl_close'] = "</li>";
$p_config['prev_tag_open'] = "<li>";
$p_config['prev_tagl_close'] = "</li>";
$p_config['first_tag_open'] = "<li>";
$p_config['first_tagl_close'] = "</li>";
$p_config['last_tag_open'] = "<li>";
$p_config['last_tagl_close'] = "</li>";
//pagination config
$p_config['total_rows'] = $count;
$p_config['per_page'] = $row_count;
//init pagination
$this->pagination->initialize($p_config);
$this->data['pagination'] = $this->pagination->create_links();
$this->load->view('templates/header', $this->data);
$this->load->view('all_movies/index', $this->data);
$this->load->view('templates/footer');
}
модель
public function getAllmoviesOnPage($row_count, $offset) {
$query = $this->db
->order_by('add_date', 'desc')
->get('movie', $row_count, $offset);
return $query->result_array();
}
вид
<h1>Все киноленты</h1>
<?php foreach ($allmovies_data as $key => $value): ?>
<p><a href = "view/<?php echo $value['slug']; ?>"><?php echo $value['name']; ?></a> | <a href = "edit/<?php echo $value['slug']; ?>">edit</a> | <a href = "delete/<?php echo $value['slug']; ?>">delete</a></p>
<?php endforeach ?>
<?php echo $pagination; ?>
Если в контроллере указать вывод на странице 30 фильмов, то пагинация покажет две страницы, поскольку в базе сейчас 50 фильмов. То есть, код корректно получает информацию с БД, ошибка возникает при выводе ее в браузере.
Подскажите советом.
Спасибо!
5 ответов
$offset = (int) $this->uri->segment(2);
$row_count = 20;
У меня так написано:
$offset = (int) $this->uri->segment(4);
$row_count = 3;
у вас segment(2) написано.
Если написать это, какой вывод будет в браузере?
echo $this->uri->segment(2);
student_G0lztEyB, спасибо вам за ответ. Я так понял, что в уроке автор указывает segment 4, поскольку страница вывода http://kinomonster.com/movies/type/films/ в 4 позиции.
У меня же, при выполнении ДЗ, страница вывода http://kinomonster.com/all_movies То есть, на второй позиции. Поэтому, указал segment 2.
В случае ложности моих заключений, буду благодарен за пояснение!
СПАСИБО.
спасибо, student_G0lztEyB, за мысль!
на странице админпанели http://kinomonster.com/all_movies/ НИЧЕГО не выводит.
Но, если, например, на странице создания http://kinomonster.com/all_movies/create/ выводит create.
Если прописать на админпанели http://kinomonster.com/all_movies/
print_r($this->uri->segment(1)); выводит all_movies
Следовательно, в контроллере обращение к segment-2 невозможно, его не существует!
Но, делаю аналогичную проверку для пагинации фильмов/сериалов, что реализована исходя из уроков
http://kinomonster.com/movies/type/films/ в контроллере указано $offset = (int) $this->uri->segment(4);
вывожу на странице print_r($this->uri->segment(4)); НИЧЕГО нет!
вывожу print_r($this->uri->segment(3)); выводит films
То есть, поведение аналогичное, что и на странице админпанели http://kinomonster.com/all_movies/ с тем отличием, что пагинация работает!
Возможно, есть идеи!!! СПАСИБО
У меня была проблема в значении segment, у меня рейтинг фильмов на странице localhost/rating/view - а сегмент был 4, поставил 3 и пагинация заработала!