Мобильный веб-сайт и настольный веб-сайт: нужно ли дублировать мой код?

У меня есть веб-сайт, созданный с помощью Symfony2, и я хотел бы создать его мобильную версию с использованием jQuery mobile (в настоящее время я использую загрузчик Twitter для настольной версии).

Я действительно смущен решением, которое я должен выбрать:

  • создайте поддомен, например: http://mobile.mywebsite.com/ и создайте другой проект Symfony, который будет очень похож, но только с другими файлами html.twig (для интеграции с мобильным jQuery), но это означает, что я буду дублировать большой часть моего кода?

  • Медиа-запросы внутри моего проекта Symfony в HTML-файлы для использования мобильных элементов JQuery в соответствии с размером экрана. Таким образом, у меня будет только один проект для поддержки.

Любой совет будет полезен! Спасибо!

3 ответа

Решение

Вы можете сделать маршрутизацию на основе доменного имени:

http://symfony.com/doc/master/components/routing/hostname_pattern.html

При этом вы можете иметь различные контроллеры для мобильного сайта, но все равно повторно использовать вашу модель и (по крайней мере, некоторые из них) свой вид. Вы даже можете повторно использовать некоторые контроллеры, установив параметр (на основе хоста) в маршрутизации, а затем используя его в контроллерах:

# routing.yml

mobile_homepage:
    path:     /
    host:     m.{domain}
    defaults: { _controller: AcmeDemoBundle:Main:homepage, mobileVersion: true }
    requirements:
        domain: %domain%

homepage:
    path:  /
    defaults: { _controller: AcmeDemoBundle:Main:homepage }

Тогда в вашем контроллере:

// Acme/DemoBundle/Controller/MainController.php

public function homepageAction($mobileVersion = false) {
  ...
  if ($mobileVersion) {
    // do some mobile things, perhaps return a specific template
  } else {
    // do some non-mobile things, perhaps return a specific template
  }
  ...
}

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

Вам определенно не следует делать второй проект Symfony. По сути, вы пытаетесь создать 2 разных макета для своего сайта, чтобы они влияли только на ваш вид. Если вы не хотите использовать адаптивный дизайн, вы можете создавать шаблоны веток для своих мобильных страниц и загружать их с тех же контроллеров, которые вы используете для сайта рабочего стола.

Я знаю, что уже немного поздно, но все же это может быть полезно для других.

У меня был тот же вопрос этим утром, и Google дал мне MobileDetectBundle https://github.com/suncat2000/MobileDetectBundle/ который, кажется, решил эту проблему. Пока не пробовал, но обязательно буду!

Другие вопросы по тегам