#php #model-view-controller #codeigniter #mobile #codeigniter-2
#php #модель-представление-контроллер #codeigniter #Мобильный #codeigniter-2
Вопрос:
Я все еще пытаюсь найти способ запустить мобильный сайт. У меня есть веб-приложение в CodeIgniter, и я хотел бы создать его мобильную версию. Однако я не хочу переписывать слишком много своего кода, особенно мои модели.. (Поскольку они возвращают необработанные данные, которые я могу использовать где угодно.)
Я хочу запустить свой мобильный веб-сайт на поддомене ( m.mydomain.tld
). Настольная версия выполняется по адресу www.mydomain.tld
. Я попытался указать поддомен в папке моего приложения CI; когда появляется мобильный браузер www.mydomain.tld
, я перенаправляю его на m.mydomain.tld
. Этот поддомен, как я уже сказал, указан в папке моего приложения CI; затем я обслуживаю контроллеры и представления, оптимизированные для мобильных устройств.
Однако! Как указано в app/config/config.php
, base_url моего приложения является:
$config['base_url'] = 'http://www.mydomain.tld/';
Итак, перенаправление на m.mydomain.tld
на самом деле не работает, потому что я все еще перенаправляюсь на www
, а я этого не хочу, даже если затем он делает то, что я хочу, чтобы он делал.
Способ, которым я пытаюсь решить эту проблему, заключается в создании двух папок приложений с разными контроллерами / представлениями, но общими моделями и т.д. Итак, я пытаюсь найти способ реструктурировать мое приложение CodeIgniter, чтобы я мог совместно использовать свои модели и «пользовательский контроллер» (MY_Controller), а также некоторые пользовательские библиотеки / помощники между различными приложениями.
Я надеюсь, что это понятно, если нет, я с удовольствием объясню подробнее, что я ищу. Большое спасибо!
Комментарии:
1. Добавьте другой вид к моделям для своей мобильной версии, а не создавайте совершенно новое приложение. Я никогда не использовал CI, но это входит в пакет с agavi.org В конце концов, в этом весь смысл архитектуры MVC.
2. Уточняю мой вопрос, почему я не думаю, что это возможно. Спасибо!
3. О, я понимаю вашу проблему. Вам нужно сделать ваш конфигурационный файл чувствительным к местоположению, в котором работает ваше приложение.
Ответ №1:
Возможно, вам стоит взглянуть на новую функцию CodeIgniter 2.0: package.
Пакеты позволяют совместно использовать библиотеки, модели и т.д. с помощью :
$this->load->add_package_path('/usr/local/codeigniter/shared');
Читать это:
http://philsturgeon.co.uk/blog/2010/04/codeigniter-packages-modules
Надеюсь, это поможет.
Комментарии:
1. Спасибо. Я обязательно проверю это, честно говоря, не слышал об этом. Похоже, это может быть то, что мне нужно.
Ответ №2:
В config.php замените $config['base_url'] = 'http://www.mydomain.tld/';
этим:
if(isset($_SERVER['HTTPS']) and 'on' === $_SERVER['HTTPS']) {
$config['base_url'] = 'https://';
} else {
$config['base_url'] = 'http://';
}
$config['base_url'] .= $_SERVER['SERVER_NAME'] . '/';
Это приведет к получению URL-адреса из переменных среды Apache / server, поэтому, если вы получаете доступ к сайту через поддомен, он будет использовать URL-адрес поддомена, или если вы получаете к нему доступ через корневой домен, он будет использовать корневой домен.
Я не эксперт в CI, поэтому, возможно, есть другие способы, но это самое простое решение, о котором я знаю.
Комментарии:
1. На самом деле это то, что делают последние версии CI, чтобы (наконец) угадать базовый URL, если он не установлен. (Хотя это немного отличается)
Ответ №3:
Я думаю, что правильный способ решить эту проблему — просто создать новый набор контроллеров и представлений (предназначенных для мобильных устройств) в вашем существующем веб-приложении. Затем просто определите маршруты для новых «мобильных» контроллеров (возможно, вам также следует добавить префикс «m /» или «mobile /» для каждого из маршрутов), и это все.
Обновить:
Хорошо, я понимаю. Я рекомендую вам сделать это таким образом:
-
Сначала создайте эту запись в config.php:
$config["mobile_base_url"] = "http://m.yoursite.tld/";
-
Затем создайте свой url_helper, добавьте функцию mobile_site_url(), которая была бы аналогом функции CI site_url() (вам понадобится это для ссылок в представлениях и контроллерах).
-
Создавайте мобильные представления и контроллеры, определяйте маршруты для них с префиксом «m /».
-
Сделайте небольшой взлом .htaccess для перезаписи URL, описанный на этой странице форума http://www.webmasterworld.com/apache/3509887.htm , чтобы все запросы к m.yoursite.tld/… перешел бы на ваш сайт.tld /m /…
Я предполагаю, что вы столкнетесь с некоторыми проблемами при таком подходе, но вам определенно не следует создавать отдельное приложение CI для вашей проблемы.
Надеюсь, это поможет.
Комментарии:
1. Вам не нужен целый новый набор контроллеров, просто новые представления. К контроллеру был бы просто добавлен дополнительный метод, позволяющий мобильному устройству указывать на правильный вид. Опять же, я не знаю, действительно ли CI является MVC.
2. Я согласен с вами. Я рекомендовал создавать контроллеры на случай, если некоторые данные будут ненужными в мобильных представлениях, поэтому создание оптимизированных контроллеров уменьшит нагрузку на модели.
3. Я не думаю, что CI — это НЕ MVC, просто ему все равно, как вы кодируете. Если ваши разработчики обычно не работают в MVC, ваш CI-код в конечном итоге не будет выглядеть как MVC.