3

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

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

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

ответ

1

Наконец я последовал за подходом к другому маршруту проекта 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

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

4

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

Вы можете пойти по маршруту «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', 
)); 

So - Люди никогда не видят/мобильные/URL,, но теперь вы можете выбрать, какой умник шаблон на основе запроса: : экземпляр() -> пары ('формат');

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

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

Надежда это помогает;)

+0

если вы используете ваши маршруты для генерации ссылок, то пользователь увидит/мобильный/URL, даже больше, вы закончите с дублированными ссылками (плохо для SEO). Я думаю, что лучше использовать тот же url для мобильных и настольных компьютеров, определить, является ли это мобильным devie на PHP (и сохранить его в сеансе), и решить в ваших действиях или view_models, что вы хотите показать. – Enrique

0

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