如何为不同的“移动设备接口”和“桌面接口”组织代码

时间:2010-02-22 14:10:58

标签: php user-interface kohana mobile-website code-organization

我正在筹划一个网络应用程序。我正在使用PHP框架Kohana和Smarty。我的Web应用程序也将具有移动设备界面。现在,这两个接口会有很多常见的和很多单独的代码。

我应该如何组织代码:

  1. 没有重复的代码。
  2. 不会加载不必要的代码。例如,桌面UI特定代码不应加载到iPhone界面,反之亦然。

4 个答案:

答案 0 :(得分:4)

你真的有几个选择!

你可以选择使用共享的Kohana模块进入“2项目”路线 - 但我个人不喜欢这种方法。

我个人会使用类似的方法作为多语言网站 - 所以... apache(或其他)会重写m.example.tld / my / page - > www.example.tld /移动/我/页

假设您使用Kohana3 - 标准路线可以更改为:

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

所以 - 用户永远不会看到/ mobile / URL,但您现在可以根据Request :: instance() - &gt; param('format')选择哪个smarty模板;

可能 - 您只需复制每个平台的视图文件/智能模板。

我对输出格式使用了类似的模式...... XML,JSON,XHTML,RSS ..

希望这会有所帮助;)

答案 1 :(得分:1)

一种方法是简单地为桌面浏览器和移动浏览器使用单独的视图。您的所有逻辑都将在您的控制器中,因此您不会复制代码,您只需根据浏览器的用户代理字符串调用相关视图。

答案 2 :(得分: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/

答案 3 :(得分:0)

我绝对建议为移动设备和桌面显示器提供单独的视图。如果可能的话,不要直接将视图绑定到用户代理字符串 - 使用用户代理字符串将移动设备定向到单独的URL(例如m.whatever.com/page或www.whatever.com / m / page)分别呈现。