Почему пагинация не работает при переходе по страницам?

0

Здравствуйте. 

Помогите, пожалуйста, разобраться с задачей!

Создал 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 фильмов. То есть, код корректно получает информацию с БД, ошибка возникает при выводе ее в браузере.

Подскажите советом.

Спасибо!

codeigniter

5 ответов

0
$offset = (int) $this->uri->segment(2);
$row_count = 20;

У меня так написано:

$offset = (int) $this->uri->segment(4);
$row_count = 3;		

у вас segment(2) написано.

0

Если написать это, какой вывод будет в браузере?

echo $this->uri->segment(2);
0

student_G0lztEyB, спасибо вам за ответ. Я так понял, что в уроке автор указывает segment 4, поскольку страница вывода http://kinomonster.com/movies/type/films/ в 4 позиции. 

У меня же, при выполнении ДЗ, страница вывода http://kinomonster.com/all_movies То есть, на второй позиции. Поэтому, указал segment 2. 

В случае ложности моих заключений, буду благодарен за пояснение!

СПАСИБО.

0

спасибо, 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/  с тем отличием, что пагинация работает! 

Возможно, есть идеи!!! СПАСИБО

0

У меня была проблема в значении segment, у меня рейтинг фильмов на странице localhost/rating/view - а сегмент был 4, поставил 3 и пагинация заработала!

Sign up or Log in to write an answer