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

Serebos

Новичок
Здравствуйте.
Помогите, пожалуйста, разобраться с задачей!
Создал CRUD приложение для работы с фильмами/сериалами через админ-панель. Все работает: добавить, отредактировать, удалить. Так, по этой ссылке выводятся все фильмы: http://kinomonster.com/all_movies для дальнейшей работы с ними.

В заключение - создал пагинацию на странице вывода всех фильмов. Пагинация выводит блок с необходимым количеством фильмов на странице (например, 20) по ссылке http://kinomonster.com/all_movies. При попытке перейти на другую или третью страницу в url прописываются адреса 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>

<h4><a href="create">добавить фильм</a></h4><br>
<br>

<?php foreach ($allmovies_data as $key => $value): ?>
    <p><a href = "view/<?php echo $value['slug']; ?>"><?php echo $value['name']; ?></a> | <a style="color: red" href = "edit/<?php echo $value['slug']; ?>"><span class="glyphicon glyphicon-pencil"></span>edit</a> | <a style="color: gray" href = "delete/<?php echo $value['slug']; ?>"><span class="glyphicon glyphicon-trash"></span>delete</a></p>
<?php endforeach ?>

<?php echo $pagination; ?>
Если в контроллере указать вывод на странице 30 фильмов, то пагинация покажет две страницы, поскольку в базе сейчас 50 фильмов. То есть, код корректно получает информацию с БД, ошибка возникает при выводе ее в браузере.

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

Спасибо!
 
Последнее редактирование:

Serebos

Новичок
так же, я обратил внимание, что после добавления пагинации перестали работать запросы на просмотр, редактирование, удаление фильма. Не только проблемы с переходом по страницам пагинации. Буду все пересматривать код, в целях понять, что же изменило уже налаженные связи с БД!
Посмотреть вложение пагинация.jpg
 

Serebos

Новичок
изменил имя переменной и ссылки на просмотр/редактирования/удаление заработали. Переход по страницам пагинации, по-прежнему, не работает. Еще попытаюсь разобраться в документации... и необходимо идти далее.
 

WMix

герр M:)ller
Партнер клуба
я не знаю как там в кохане, но 'all_movies/delete' четко совпадает с
Код:
 'all_movies/(:any)'
но еще больше смущает
Код:
$route['all_movies/(:any)'] = 'all_movies/view/$1';
$route['all_movies/(:any)'] = 'all_movies/$1';
 

Serebos

Новичок
$route['all_movies/any)'] = 'all_movies/view/$1'; $route['all_movies/any)'] = 'all_movies/$1';
спасибо, WMix я так понял, из замечания, что запись
Код:
$route['all_movies/(:any)']
должна иметь только одно значение.

Так, например, вот мой роутер для новостей с аналогичным алгоритмом работы

Код:
$route['news'] = 'news';
$route['news/create'] = 'news/create';
$route['news/edit'] = 'news/edit';
$route['news/delelte'] = 'news/delete';
$route['news/(:any)'] = 'news/view/$1';
Сейчас попробую изменить код.
 

WMix

герр M:)ller
Партнер клуба
спасибо, WMix я так понял, из замечания, что запись
Код:
$route['all_movies/(:any)']
должна иметь только одно значение.
с точки зрения array
Код:
$route['all_movies/(:any)'] = 'all_movies/view/$1';
$route['all_movies/(:any)'] = 'all_movies/$1';
останется только 2я запись
 

Serebos

Новичок
с точки зрения array
спасибо, WMix , за комментарий не совсем понятен смысл слов.
Но, с точки зрения логики: эта запись
Код:
$route['all_movies/(:any)'] = 'all_movies/$1';
уже подразумевает возможность существования такой записи
Код:
$route['all_movies/(:any)'] = 'all_movies/view/$1';
 

Serebos

Новичок
у меня пагинация реализована уже дважды: на странице просмотра фильмов/сериалов
Код:
$route['movies/(:any)'] = 'movies/view/$1';
$route['movies/type/films'] = 'movies/type/films/$1';
$route['movies/type/serials'] = 'movies/type/serials/$1';
и на странице с рейтингом
Код:
$route['rating'] = 'main/rating';
$route['rating/(:any)'] = 'main/rating/$1';
Относительно админпанели, в принципе, это должно работать
Код:
$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/view/(:any)'] = 'all_movies/view/$1';

$route['all_movies/(:any)'] = 'all_movies/$1';
но, не работает.
В любом случае, переход по ссылкам пагинации, например, http://kinomonster.com/all_movies/20 или http://kinomonster.com/all_movies/40 должен быть доступным посредством этого роутера
Код:
$route['all_movies/(:any)'] = 'all_movies/$1';
Нашел страницу о реализации пагинации https://www.codeigniter.com/userguide3/libraries/pagination.html?highlight=pagination#id4
возможно, разберусь.
 

Serebos

Новичок
закомментировал все роутеры, оставил один
Код:
$route['all_movies/(:any)'] = 'all_movies/$1';
все работает, кроме ссылок пагинации. добавил фильм в БД, удалил, работает.
буду читать документацию.
 

AnrDaemon

Продвинутый новичок
берет get параметры из браузера по url http://kinomonster.com/all_movies
segment(2) - это позиция all_movies в адресной строке.
Вы на мой вопрос просто ответить можете?… Не надо мне объяснять, как работает библиотека - мне это не интересно. Я задал конкретный вопрос - чему равно значение переменной при выполнении определённого запроса? (Мне даже собственно ответ не интересен - он должен быть интересен прежде всего вам!)
 

Serebos

Новичок
чему равно значение переменной при выполнении определённого запроса?
выводит ошибку, что не определена переменная.
Код:
A PHP Error was encountered
Severity: Notice

Message: Undefined variable: offset

Filename: all_movies/index.php

Line Number: 14

Backtrace:

File: C:\xampp\htdocs\kinomonster\application\views\all_movies\index.php
Line: 14
Function: _error_handler

File: C:\xampp\htdocs\kinomonster\application\controllers\All_Movies.php
Line: 72
Function: view

File: C:\xampp\htdocs\kinomonster\index.php
Line: 315
Function: require_once
Попытался определить значение $offset в другом контроллере, где пагинация работает - аналогичное сообщение об ошибке!
Попробую убрать эту переменную с кода и посмотрю на поведение.
 

Serebos

Новичок
Убрал $offset с контроллера, где пагинация работает, при переходе по ссылкам пагинации (номера страниц) всегда отображается первая страница (т.е. ошибки не выводятся).
Убрал $offset с контроллера для админпанели - при переходе, то же сообщение - СТРАНИЦА НЕ НАЙДЕНА. Дело не в $offset.
 

Serebos

Новичок
И чему равен $offset ?
на странице админпанели http://kinomonster.com/all_movies/ запись print_r($this->uri->segment(2)); НИЧЕГО не выводит.

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

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

nllabs

Новичок
print_r($this->uri->segment(1)); выводит all_movies
Что делает функция print_r() ?

Следовательно, в контроллере обращение к segment-2 невозможно, его не существует!
Странное заявление. А если все-таки написать:
PHP:
$seg =  $this->uri->segment(2);
то что, хостинг сломается ?
Вы должны четко понимать какой возвращается результат.

А вообще, удалите все и начните заново с простого примера из документации (ссылка выше).
Вы заблудились в трех соснах. Нет понимания, что такое print_r(), $this->uri->segment($value), что такое роутинг и как его настраивать.
 
Сверху