Потеря сегментов URI при разбиении на страницы с CodeIgniter - PullRequest
5 голосов
/ 11 июня 2010

У меня есть интерфейс / платежей, где пользователь должен иметь возможность фильтровать через диапазон цен, банк и другие вещи. Эти фильтры являются стандартными полями выбора. Когда я отправляю форму фильтра, все данные публикации отправляются в другой метод, называемый платежами / поиском. Этот метод выполняет проверку, сохраняет значения записей в флэш-данные сеанса и перенаправляет пользователя обратно в / Payment, передавая имя флэш-данных через URL.

Так что мои стандартные пагинационные ссылки без фильтров в точности такие:

payments/index/20/
payments/index/40/
payments/index/60/

И если вы отправите форму фильтра, URL-адрес будет возвращен:

payments/index/0/b48c7cbd5489129a337b0a24f830fd93

Это прекрасно работает. Если я заменяю ноль на что-то другое, он прекрасно разбирается. Однако единственная проблема заключается в том, что ссылки на страницы << 1 2 3 4 >> не сохранят хэш после смещения нумерации страниц. CodeIgniter генерирует ссылки на страницы, игнорируя этот дополнительный сегмент URI.

Моя конфигурация uri_segment уже установлена ​​на 3:

$config['uri_segment'] = 3;

Я не могу установить uri_segment в 4, потому что этот хэш может существовать или не существовать. Любые идеи о том, как я могу решить это? Обязательно ли для CI иметь смещение в качестве последнего сегмента в URI? Может быть, я пытаюсь неправильный подход, поэтому я все уши.

Спасибо, ребята.

edit: Почему я передаю имя flashdata через uri, который вы можете спросить? потому что это позволяет пользователю открывать несколько вкладок браузера и делать разные поиски в каждой вкладке. Для каждой выполняемой фильтрации создается новая переменная flashdata.

Ответы [ 3 ]

3 голосов
/ 29 июня 2010

Только для пользователей, пришедших из Google, вот решение:

В массиве конфигурации пагинации я изменил свой base_url для этого:

$config['base_url'] = site_url('payments/index/' . $this->uri->segment(3) . '/' . $this->uri->segment(4));

Где сегмент (3) - мой номер смещения, а сегмент (4) - хэш. Таким образом, в этом случае хэш может существовать или не существовать, а нумерация страниц все равно будет работать.

Другой подход может быть следующим: если вы переходите к платежам, и в URL-адресе отсутствует идентификатор flashdata, он перенаправляет пользователя на платежи / поиск и создает пустой массив с пустыми фильтрами. Затем он перенаправляет обратно на платежи / _NEW_FLASHDATA_ID_HERE_. Таким образом, URL всегда будет иметь идентификатор flashdata в URL, и вы можете иметь смещение нумерации страниц в последнем сегменте URI, как обычно.

1 голос
/ 13 июня 2010

Почему вы не проверяете, существует ли хеш, и устанавливаете uri_segment на основании этого?

1 голос
/ 11 июня 2010

Почему бы не установить хэш в качестве элемента сеанса?

$this->session->set_userdata('session_flashdata_hash', $hash);

Хеш будет доступен до тех пор, пока вы не сбросите его

$this->session->unset_userdata('session_flashdata_hash');

Или пока вы не уничтожите сеанс.

$this->session->sess_destroy();
...