2013-03-13 191 views
0

我的網站「site.xyz.com」被放入客戶的主網站「abc.com」。客戶希望擁有一個加載在iframe中的我的網站的移動版本,並且他們想要決定哪個用戶需要查看我們網站的移動版本,所以他們請求了一個像site.xyz.com/mobile這樣的鏈接,加載移動網站。CodeIgniter手機網站路線

我的網站已經建在CodeIgniter中,服務器上不允許.htaccess。該移動網站有類似的HTML,但大小和圖像將有所不同。所以我打算爲移動網站使用相同的MVC結構,但使用不同的樣式表。我不是去檢查它是否是一個移動網站。任何對site.xyz.com/mobile的訪問都應顯示移動版本。

我試過$route['mobile/(:any)'] = '$2';但是在我的代碼中,我使用的是base_url(),它反映site.xyz.com/products而不是site.xyz.com/mobile/products。確定觀衆是否看到網站的桌面/移動版本也很重要。

我不打算依賴會話/ cookie並根據這些變量設置樣式表。未來的訪問可能是一個問題。

看起來很簡單,但沒有得到正確的想法...任何提示我如何能使這項工作?

回答

0

一個可能的(不是完全漂亮)的方法是在控制器文件夾中有一個名爲「mobile」的子文件夾。然後,您可以將所有控制器實質上覆制到該目錄中,並更改路徑/邏輯以適合您的移動網站。

根據CodeIgniter's docs,如果控制器在子文件夾中,路由將呈現爲* base_url/subfolder/controller/method *。如果您使用的是模板,那麼您可以加載與普通網站相同的視圖,只需將mobile_template.php加載到移動文件夾內的控制器中即可。

似乎有更多的工作比你希望的更多,但是你可能不得不對你的移動網站做更多的事情,而不僅僅是改變CSS文件。

+0

德文 - 我做了以前考慮這個選項,但不想在那個方向走。但是,出於好奇學習,有一個問題 - 我的代碼中有許多路由條件,比如'$ route ['thanks'] ='cart/thanks';',會不會有類似'$ route ['( :any)/ thanks'] ='$ 1/cart/thanks';'這樣我就不必單獨複製每條路線,但是因爲目前它們並沒有從控制器中的移動子文件夾中取出。 – 2013-03-13 18:31:34

+0

可以理解,但你可能沒有更好的選擇。基於URL參數動態加載CSS文件本身很困難,但是隻通過更改CSS文件來嘗試使移動網站看起來更加堅固更加困難。 – 2013-03-13 18:33:33

+0

無論如何,我必須做CSS改變。但是我想要做的就是不復制當前的MVC代碼,看看是否可以使用路徑調整它並提供更簡潔的代碼。 – 2013-03-13 18:38:43

1

你可以使自己的base_url()功能全,可檢測用戶是通過檢查使用檢查什麼uri_string()返回查看該頁面的網址查看移動網站。

application/helpers/url_helper.php

if (! function_exists('base_url')) 
{ 
    /** 
    * Base URL 
    * 
    * Create a local URL based on your basepath. 
    * Segments can be passed in as a string or an array, same as site_url 
    * or a URL to a file can be passed in, e.g. to an image file. 
    * 
    * @param string 
    * @return string 
    */ 
    function base_url($uri = '') 
    { 
     $currentUri = uri_string(); // Get current URI 
     $currentUri = rtrim($currentUri,'/').'/'; // make sure $uri ends in a '/' 
     // If the string begins with 'mobile/', 
     // prepend it to the given array/string 
     if(strpos($currentUri,'mobile/') === 0) 
     { 
      if(is_array($uri))) 
       array_unshift($uri,'mobile'); 
      else 
       $uri = 'mobile/'.$uri; 
     } 

     $CI =& get_instance(); 
     return $CI->config->base_url($uri); 
    } 
} 
+0

這實際上是一個好主意,可以引用URL並動態改變CSS。他是否還需要讓自己的路線進行匹配? – 2013-03-13 19:31:25

+0

我相信它應該工作,因爲他已經嘗試過使用'$ route ['mobile /(:any)'] ='$ 2';',除了'base_url()'會產生一個錯誤的URL。 – Zombaya 2013-03-13 19:33:32

+0

良好的通話,錯過了那一部分。我可能會在將來使用它。好建議。 – 2013-03-13 19:35:47