Сегменты Losing URI при нумерации страниц с CodeIgniter

У меня есть / платежный интерфейс, где пользователь должен смочь отфильтровать через диапазон цен, банк и другой материал. Те фильтры являются стандартными избранными полями. Когда я отправляю форму фильтра, все данные сообщения переходят к другому методу, названному платежами/поиском. Тот метод выполняет проверку, сохраняет значения сообщения в сессию flashdata и перенаправляет пользователя назад к / платежам, передающим имя flashdata через 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? Возможно, я пробую неправильный подход, таким образом, я внимательно слушаю.

Спасибо люди.

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

5
задан Dan H 12 June 2010 в 15:42
поделиться

3 ответа

Просто для пользователей, пришедших из 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, как обычно.

3
ответ дан 14 December 2019 в 18:59
поделиться

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

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

Хеш будет доступен, пока вы его не отключите

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

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

$this->session->sess_destroy();
1
ответ дан 14 December 2019 в 18:59
поделиться

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

1
ответ дан 14 December 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: