2010-02-22 43 views
3

我正在爲一個Web應用程序進行規劃。我使用Smarty的PHP框架Kohana。我的Web應用程序也將具有移動設備界面。現在,這兩個接口將會有很多共同的和很多獨立的代碼。如何爲不同的「移動設備接口」和「桌面接口」組織代碼

我應該如何組織代碼,以便:

  1. 沒有重複的代碼。
  2. 不必要的代碼不會加載到。例如,桌面UI特定代碼不應該加載到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

真的有好幾種選擇!

您可以選擇使用共享Kohana模塊進入「2項目」路線 - 但我個人不喜歡這種方法。

我個人會使用類似的方法作爲多語言站點 - 所以... 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', 
)); 

所以 - 用戶將不會看到/移動/網址,但您現在可以選擇Smarty的模板,根據請求: :實例() - >參數( '格式');

可能 - 您只需要爲每個平臺複製視圖文件/ smarty模板。

我使用的輸出格式... XML,JSON,XHTML,RSS類似的模式..

希望這有助於;)

+0

如果你正在使用你的路由生成鏈接,那麼用戶會看到/移動/ URL,甚至更多,你將與複製網址結尾(壞的搜索引擎優化)。我認爲使用移動和桌面的相同url更好,檢測它是否是PHP上的移動設備(並將其保存在會話中),並在您的動作或view_models中確定要顯示的內容。 – Enrique

0

我絕對建議具有移動和桌面顯示器獨立意見。如果可能,請不要直接將視圖與用戶代理字符串綁定 - 使用用戶代理字符串將移動設備指向單獨的URL(如m.whatever.page或www.whatever.com/m /頁)分開渲染。

相關問題