移动网站和桌面网站:我是否必须复制我的代码?

时间:2013-04-10 13:10:35

标签: jquery-mobile mobile symfony responsive-design

我有一个使用Symfony2构建的网站,我想使用jQuery mobile创建它的移动版本(我目前正在使用桌面版的Twitter引导程序)。

我对我必须选择的解决方案感到困惑:

  • 创建一个子域名,例如:http://mobile.mywebsite.com并创建另一个非常相似的Symfony项目,但只使用其他html.twig文件(以集成jQuery mobile),但这意味着我会重复我代码的很大一部分?

  • 我的symfony项目中的html文件中的媒体查询根据屏幕大小使用jquery移动元素。因此,我只有一个项目需要维护。

任何建议都会很棒!谢谢!

3 个答案:

答案 0 :(得分:2)

最佳做法是创建一个具有响应式设计的页面(媒体查询是其中的一部分),可以适应任何屏幕尺寸。

你绝对不应该做第二个Symfony项目。您实际上是在尝试为您的网站制作2种不同的布局,因此它们只会影响您的视图。如果您不想使用自适应设计,可以为移动页面创建树枝模板,并从用于桌面网站的相同控制器加载这些模板。

答案 1 :(得分:2)

您可以根据域名进行路由:

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
  }
  ...
}

答案 2 :(得分:1)

我知道它有点晚了,但对其他人来说仍然有用。

今天早上我有同样的问题,谷歌给了我MobileDetectBundle https://github.com/suncat2000/MobileDetectBundle/,这似乎解决了这个问题。还没试过,但我肯定会这样做!