как организовать код для разных «интерфейсов мобильных устройств» и «интерфейсов рабочего стола» - PullRequest
3 голосов
/ 22 февраля 2010

Я планирую веб-приложение. Я использую PHP-фреймворк Kohana с Smarty. Мое веб-приложение также будет иметь интерфейс мобильного устройства. Теперь будет много общего и отдельного кода для двух интерфейсов.

Как мне организовать код так, чтобы:

  1. Нет дублирования кода.
  2. Ненужный код не загружается в. Например, специальный код пользовательского интерфейса рабочего стола не должен загружаться в интерфейс iPhone или наоборот.

Ответы [ 4 ]

4 голосов
/ 23 февраля 2010

У вас есть несколько вариантов на самом деле!

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

Я бы лично использовал аналогичный подход в качестве многоязычного сайта - так ... apache (или что-то еще) переписал бы m.example.tld / my / page -> www.example.tld / mobile / my / page

Если вы используете Kohana3 - стандартный маршрут может быть изменен на что-то вроде:

Route::set('messages', '<format>/(<controller>(/<action>(/<id>)', array('format' => '(mobile|desktop))
->defaults(array(
 'format'     => 'desktop',
 'controller' => 'welcome',
 'action'     => 'index',
));

Итак - пользователи никогда не увидят URL-адреса / mobile /, но теперь вы можете выбрать, какой шаблон smarty основан на Request :: instance () -> param ('format');

Скорее всего - вам нужно будет только дублировать файлы вида / шаблоны smarty для каждой платформы.

Я использую аналогичный шаблон для форматов вывода ... XML, JSON, XHTML, RSS ..

Надеюсь, это поможет;)

1 голос
/ 07 мая 2010

Наконец-то я последовал подходу к другому маршруту 2 проекта. Потому что это дало большую гибкость. Если я хочу поделиться некоторыми моделями, представлениями, контроллерами, я помещаю их в «модули». Иначе, если я хочу иметь что-то отдельное для двух интерфейсов, я помещаю их в соответствующий проект.

Итак: мой источник выглядит так:

</>
  proj_desktop/
    htdocs/
    application/
      models/
      views/
      controllers/
  proj_iphone/
    htdocs/
    application/
      models/
      views/
      controllers/
  proj_mobile/
    htdocs/
    application/
      models/
      views/
      controllers/
  modules/
    myApp/
      models/
      views/
      controllers/
  system/
    models/
    views/
    controllers/
1 голос
/ 22 февраля 2010

Один из способов заключается в простом использовании отдельных представлений для настольных браузеров и мобильных браузеров. Вся ваша логика будет в вашем контроллере, поэтому вы не будете дублировать код, вы просто вызовете соответствующее представление, основанное на строке user-agent браузера.

0 голосов
/ 23 февраля 2010

Я определенно предлагаю иметь отдельные представления для мобильных и настольных дисплеев. Если это вообще возможно, не связывайте представление со строкой user-agent напрямую - используйте строку user-agent для направления мобильных устройств на отдельный URL-адрес (например, m.whever.com/page или www.whever.com / m / page), который отображается отдельно.

...