2013-03-13 3 views
0

Мой сайт «site.xyz.com» размещен на главном веб-сайте клиента «abc.com». Клиент хочет иметь мобильную версию моего сайта, загруженного в iframe, и они хотят решить, какой пользователь должен будет просматривать мобильную версию нашего сайта, поэтому они запросили ссылку, такую ​​как site.xyz.com/mobile, которая будет загрузить мобильный сайт.Маршруты мобильных сайтов CodeIgniter

Мой сайт уже создан в CodeIgniter, на серверах не разрешен .htaccess. Мобильный сайт имеет аналогичный html, но размеры и изображения будут немного разными. Поэтому я планирую использовать одну и ту же структуру MVC, но другую таблицу стилей для мобильного сайта. Я не, чтобы проверить, если это мобильный сайт или нет. любой визит на сайт.xyz.com/mobile должен показать мобильную версию.

Я пробовал $route['mobile/(:any)'] = '$2';, но затем в моем коде, где я использую base_url(), он повторяет site.xyz.com/products вместо site.xyz.com/mobile/products. Важное значение имеет определение того, видит ли зритель настольную/мобильную версию сайта.

Я не планирую в зависимости от сеанса/файла cookie и установки таблицы стилей на основе этих переменных. Будущие посещения могут быть проблемой.

Выглядит очень просто, но не получает правильную идею ... Любые советы, как я могу сделать эту работу?

ответ

0

Возможный (не совсем красивый) способ сделать это - иметь подпапку в папке контроллера под названием «мобильный». Затем вы можете по существу копировать все ваши контроллеры в этот каталог и изменить пути/логику в соответствии с вашим мобильным сайтом.

Согласно CodeIgniter's docs, если контроллер находится в подпапке, маршрут будет отображаться как * base_url/подпапка/контроллер/метод *. Если вы используете шаблоны, вы можете уйти с загрузкой тех же представлений, что и ваш обычный сайт, и просто загружать mobile_template.php в свои контроллеры внутри папки для мобильных устройств.

Кажется, что больше работы, чем вы надеялись, но вам, вероятно, придется делать больше на своем мобильном сайте, чем в любом случае менять файл CSS.

+0

Девин - Я сделал рассмотреть этот вариант ранее, но не хотел идти в этом направлении. Однако, из любопытства, чтобы узнать, один вопрос - у меня много условий маршрута в моем коде, например '$ route ['thanks'] = 'cart/thanks';', было бы что-то вроде '$ route ['(: any)/thanks '] =' $ 1/cart/thanks '; ', так что мне не нужно реплицировать каждый из маршрутов индивидуально, но поскольку в настоящее время они не вытягиваются из мобильной подпапки в контроллерах. –

+0

Понятно, но у вас может не быть лучшего варианта. Динамическая загрузка CSS-файла на основе параметра URL-адреса сама по себе сложна, но попытка заставить мобильный сайт выглядеть твердой, только изменяя файл CSS, еще сложнее. –

+0

Изменение CSS Я должен это сделать в любом случае. Но я хочу, чтобы не реплицировать текущий код MVC и посмотреть, есть ли в любом случае, я могу настроить его с помощью маршрутов и предоставить более чистый код. –

1

Вы можете создать свой собственный base_url() -функция, которая определяет, просматривает ли пользователь мобильный сайт, проверяя URL-адрес, используемый для просмотра этой страницы, путем проверки того, что возвращает uri_string().

Внутри application/helpers/url_helper.php:

if (! function_exists('base_url')) 
{ 
    /** 
    * Base URL 
    * 
    * Create a local URL based on your basepath. 
    * Segments can be passed in as a string or an array, same as site_url 
    * or a URL to a file can be passed in, e.g. to an image file. 
    * 
    * @param string 
    * @return string 
    */ 
    function base_url($uri = '') 
    { 
     $currentUri = uri_string(); // Get current URI 
     $currentUri = rtrim($currentUri,'/').'/'; // make sure $uri ends in a '/' 
     // If the string begins with 'mobile/', 
     // prepend it to the given array/string 
     if(strpos($currentUri,'mobile/') === 0) 
     { 
      if(is_array($uri))) 
       array_unshift($uri,'mobile'); 
      else 
       $uri = 'mobile/'.$uri; 
     } 

     $CI =& get_instance(); 
     return $CI->config->base_url($uri); 
    } 
} 
+0

Это действительно хорошая идея, чтобы обратиться к URL-адресу и динамически изменять CSS. Разве он еще не должен был бы набирать маршруты, чтобы соответствовать? –

+0

Я считаю, что он должен работать, так как он все пробовал использовать '$ route ['mobile/(: any)'] = '$ 2';', и он работал, за исключением того, что 'base_url()' дал бы неправильный URL-адрес. – Zombaya

+0

Хороший звонок, пропустил эту часть. Я мог бы использовать это в будущем. Хорошее предложение. –