Model view controller Zend Framework:如何在我们的移动网站上使用MVC

Model view controller Zend Framework:如何在我们的移动网站上使用MVC,model-view-controller,zend-framework,design-patterns,Model View Controller,Zend Framework,Design Patterns,好的,我开始在线订购了,这是一个我称之为“olo”的模块。我现在需要的是建立一个移动版我们的网站,完全不同的布局和设计 现在,我如何利用MVC的力量,这是我一开始就卖掉的 我想使用我在OLO模块中创建的所有不同的控制器类 现在我已经开始开发我们的移动网站,它被放置为另一个模块叫做“移动”。它是用jQuery Mobile构建的,我已经做了很多工作;信息页面、联系方式等 所有移动设备当前都被重定向到带有的域.tld/m。这样做是为了支持从移动版链接到的完整网站视图。就个人而言,我会使用front

好的,我开始在线订购了,这是一个我称之为“olo”的模块。我现在需要的是建立一个移动版我们的网站,完全不同的布局和设计

现在,我如何利用MVC的力量,这是我一开始就卖掉的

我想使用我在OLO模块中创建的所有不同的控制器类

现在我已经开始开发我们的移动网站,它被放置为另一个模块叫做“移动”。它是用jQuery Mobile构建的,我已经做了很多工作;信息页面、联系方式等


所有移动设备当前都被重定向到带有的
域.tld/m
。这样做是为了支持从移动版链接到的完整网站视图。

就个人而言,我会使用front controller插件。对我来说,在引导过程中这样做有点太早了

编写一个钩住preDispatch()的插件,并使用Zend_Http_UserAgent查找是否通过移动设备访问应用程序。然后你可以转到另一个目录。例如,假设default是当前的视图目录,mobile是新的视图目录。您只需克隆结构并修改文件,就可以做到这一点:)


借助Zend Framework 1.11Zend引入了基于的

它允许您检测移动设备并引导不同的布局。2010年12月,zend时事通讯在youtube上发布了一个“如何”的视频:


您不必使用不同的模块!只是不同的布局文件

正如ArtWorkAD所说,您可以在Zend Framework 1.11中使用wurfl适配器,该适配器允许您检测用户代理并切换布局,但这意味着您的每个视图都需要“通用”。到目前为止,我从未有过如此“普遍”的看法

您可以使用的是视图的ContextSwitch

它允许您创建不同的上下文,通常用于创建csv/xml文件。 假设您有一个名为Index的控制器和一个名为FooAction()的操作,我假设您已经有了一个视图scripts/Index/foo.phtml

您可以创建一个名为“mobile”的上下文,它将允许您为该上下文创建一个视图,如scripts/index/foo.mobile.phtml。
这类似于更改布局,但对于视图和以前的wurfl适配器,您可以更改布局并自动切换上下文。

好的,我可能应该提到这一点,但我有一个将所有移动设备重定向到
域.tld/m
的文件和一个处理/m和所有子路径的routes.ini文件。但是你对脚本目录中不同目录的评论可能很有用。你也可以使用路由器来匹配(不记得确切的方法,明天会更新答案)。这样,所有控制器和模型都保持不变,并且正如ArtWorkAD所述,只有布局发生了更改。同时看看他的建议,使用wurfl也不会有什么坏处。你将来的问题会少一些,因为你不必为普通版和移动版写两次升级,因为逻辑是一样的:)我接受了@ArtWorkAD的答案,但你的回答也很有帮助-让som代表:)据我所知,你的方式是正确的。如果我想给移动用户一个到我们非移动网站的链接,这可以通过wurfl设置完成吗?是的,你可以在页脚的某个地方提供一个简单的链接,它可以使用zend registry设置一个标志,并在你检查移动设备的地方检查这个标志,很好,这很有趣。我不确定我现在是否会使用它,我认为重写现有代码需要一点到很多时间。我现在需要做的是,CEO们总是需要在昨天完成一些事情-你知道:)对于像contextSwitch action helper这样的高级视图/布局切换,我在WURFL的帮助下写了一篇关于这一点的短文:我已经接受了@ArtWorkAD的答案,但你的回答也非常有用-有som代表:)
application/
  modules/
    olo/
      controllers/
      modules/
      views/
         scripts/
           default/
           mobile/