Потерять сегменты URI при пагинации с Codeigniter
-
26-09-2019 - |
Вопрос
У меня есть интерфейс / платежный интерфейс, где пользователь должен иметь возможность фильтровать через ценовой диапазон, банк и другие вещи. Эти фильтры являются стандартными выборами коробками. Когда я отправляю форму фильтра, все данные пост отправляются в другой метод, называемый платежами / поиска. Этот метод выполняет проверку, сохраняет значения пост в сеанс FlashData и перенаправляет пользователя обратно / платежи, проходящие имя FlashData через URL.
Таким образом, мои стандартные ссылки на пагинацию без фильтров точно так:
payments/index/20/
payments/index/40/
payments/index/60/
И если вы отправите форму фильтра, возвратный URL:
payments/index/0/b48c7cbd5489129a337b0a24f830fd93
Это работает просто здорово. Если я изменим нулю для чего-то другого, он наносит paginates просто хорошо. Однако единственная проблема заключается в том, что ссылки на страницу << 1 2 3 4 >> не будут сохранять хэш после смещения пагинации. Codeigniter генерирует ссылки страницы, игнорируя этот дополнительный сегмент URI.
My Uri_Seggent Config уже установлен на 3:
$config['uri_segment'] = 3;
Я не могу установить URI_SEGEGEGE в 4, потому что это хэш может или не может существовать. Любые идеи того, как я могу решить это? Это обязательно для CI иметь смещение как последний сегмент в URI? Может быть, я пробую неверный подход, поэтому я все уши.
Спасибо, люди.
Редактировать: почему я пропускаю имя FlashData через URI, вы можете спросить? Поскольку он позволяет пользователю открывать несколько вкладок браузера и выполнять разные поиски на каждой вкладке. Для каждой фильтрации вы выполняете, создается новые FlashData VAR.
Решение
Просто для пользователей, приходящих из Google, вот решение:
В массиве конфигурации Pagination я изменил свою 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 как обычно.
Другие советы
Почему бы не установить хеш как элемент сеанса?
$this->session->set_userdata('session_flashdata_hash', $hash);
Хеш тогда будет доступен, пока вы не будете
$this->session->unset_userdata('session_flashdata_hash');
Или пока вы не уничтожите сессию.
$this->session->sess_destroy();
Почему вы не проверяете, существует ли хэш и установить uri_segment
На основании этого?