Как настроить маршрутизацию Codeigniter для игнорирования определенной строки сегмента в URL? - PullRequest
1 голос
/ 01 июля 2010

Я не уверен, что с этим иду по правильному пути - и я довольно новичок в маршрутизации, поэтому, если это далеко от базы, я прошу прощения.

Я пытаюсь сделать ссылку внизу страницы, где посетитель может выбрать мобильный или полноэкранный режим.Я хочу, чтобы они могли делать это с любой страницы.Когда они выбирают один из них, может произойти любое количество вещей - в зависимости от того, где они находятся на сайте (то есть разные виды, функциональность и т. Д.).

В настоящий момент у меня нет Codeigniter, настроенного наразрешить строки запроса, что является поведением по умолчанию.Поэтому, чтобы передать предпочтение в ссылке, мне нужно сделать это с помощью сегмента URL.

Я надеялся сделать что-то вроде:

<? if ($in_mobile_view): ?>
  Mobile | <a href="<?= current_url() ?>/f">Full Site</a>
<? else: ?>
  <a href="<?= current_url() ?>/m">Mobile</a> | Full Site
<? endif ?>

Это прекрасно работает, когда я перехожу к: / welcome / index / m или / calendar / view / m и т. Д. Однако,если я просто нахожусь по адресу: / welcome / m или / m - где метод индекса контроллера должен сработать, я получаю 404, потому что он не может найти метод - так как он не существует.

Я думал, что с помощью маршрутизации я могу настроить Codeigniter таким образом, чтобы он игнорировал строки "m" и "f" и просто работал так, как если бы их вообще не было в URL.

Это хороший способ сделать это?Если нет, я хотел бы услышать другие предложения.Если это достойный путь, я был бы очень признателен, если бы кто-то мог указать мне правильное направление для маршрутизации.

Спасибо за ваше время.

1 Ответ

3 голосов
/ 01 июля 2010

Зачем выбирать это с помощью URL?

Вы можете обнаружить базовое «мобильно» с помощью библиотеки User Agent.Возьмите это значение и установите сеанс в зависимости от того, что предлагает пользовательский агент, а затем просто свяжитесь с контроллером, который переключает пользователя между мобильной и полной версиями при нажатии.

Запустите это в глобальном коде где-нибудь как ловушку или Базовый контроллер .

if($this->user_agent->is_mobile() && ! $this->session->userdata('site_mode'))
{
    $this->session->set_userdata('site_mode', $this->user_agent->is_mobile() ? 'mobile' : 'full');
}

Тогда ваш контроллер может просто установить сессию на что-либо в зависимости от того, на что он нажал.

/ switch / mobile
/ switch /полный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...