2011-05-12 87 views
6

我仍在試圖找出一種方法來獲取移動網站的運行。我在CodeIgniter中有一個Web應用程序,我想創建它的移動版本。然而,我不想重寫我的代碼太多,尤其是不是我的模型。(因爲他們返回我可以在任何地方使用的原始數據。)在不同的應用程序之間共享CI模型

我想運行我的手機網站在一個子域(m.mydomain.tld )。桌面版運行在www.mydomain.tld。我試着將子域指向我的CI應用程序文件夾;當移動瀏覽器到達www.mydomain.tld時,我將其重定向到m.mydomain.tld。正如我所說,這個子域名指向我的CI應用程序文件夾;然後我提供移動優化的控制器和視圖。

但是!作爲app/config/config.php規定,我的應用程序的BASE_URL是:

$config['base_url'] = 'http://www.mydomain.tld/';

所以重定向到m.mydomain.tld並沒有真正的工作,因爲我仍然重定向到www,我不希望出現這種情況,即使它再不會我想要它做什麼。

我試圖解決這個問題的方法是使用不同的控制器/視圖,但共享模型等兩個應用程序文件夾。所以,我試圖找出一種方法來重構我的CodeIgniter應用程序,所以我可以分享我的模型和「自定義控制器」(MY_Controller),以及不同應用程序之間的一些自定義庫/助手。

我希望這是明確的,如果不是,我會很樂意解釋更多我在找什麼。非常感謝!

+0

爲您的移動版本添加另一種視圖,而不是創建一個全新的應用程序。我從來沒有使用CI,但是這是作爲http://www.agavi.org包的一部分。這完全是MVC體系結構的重點。 – Treffynnon 2011-05-12 13:09:26

+0

更新我的問題,爲什麼我不認爲這是可能的。謝謝! – cabaret 2011-05-12 13:12:06

+0

哦,我看到你的問題。你需要使你的配置文件對你的應用程序工作的位置敏感。 – Treffynnon 2011-05-12 13:20:59

回答

2

在配置中。PHP這種替換$config['base_url'] = 'http://www.mydomain.tld/';

if(isset($_SERVER['HTTPS']) and 'on' === $_SERVER['HTTPS']) { 
    $config['base_url'] = 'https://'; 
} else { 
    $config['base_url'] = 'http://'; 
} 
$config['base_url'] .= $_SERVER['SERVER_NAME'] . '/'; 

這將獲得來自Apache /服務器環境變量的URL,所以如果您通過子域名訪問的網站,然後它會如果通過根域名訪問它使用的子域網址或它將使用根域。

我不是CI專家,所以可能有其他方法,但這是我所知道的最簡單的解決方案。

+0

這實際上是最新的CI版本如果沒有設置(最終)猜測基礎URL。 (雖然略有不同) – 2011-05-12 16:16:06

2

我認爲解決這個問題的正確方法就是在現有的網絡應用程序中創建一組新的控制器和視圖(針對移動設備)。然後,爲新的「移動」控制器定義路線(也許你還應該爲每條路線添加一個「m /」或「mobile /」前綴),就這些了。

更新:

好吧,我明白了。我建議你做這樣:

  1. 首先在config.php創造這個紀錄:

    $config["mobile_base_url"] = "http://m.yoursite.tld/"; 
    
  2. 然後創建url_helper,添加mobile_site_url()函數,這將是一個模CI site_url()函數(您將需要此視圖和控制器中的鏈接)。

  3. 創建移動視圖和控制器,使用「m /」前綴爲它們定義路由。

  4. 做一個小的.htaccess破解了網址在這個論壇頁面http://www.webmasterworld.com/apache/3509887.htm重寫描述,讓所有的請求m.yoursite.tld/...會去yoursite.tld/M/...

我想你會用這種方法運行一些問題,但是你絕對不應該爲你的問題創建單獨的CI應用程序。

希望這會有所幫助。

+0

你不應該需要一組全新的控制器,只需要新的視圖。控制器會添加一個額外的方法,以便移動設備指向正確的視圖。我不知道CI是否真的是MVC。 – Treffynnon 2011-05-12 13:14:53

+0

我同意你的意見。我建議創建控制器,以防在移動視圖中某些數據不需要,因此創建優化的控制器會減少模型的負載。 – 2011-05-12 13:19:01

+0

更新了我的問題。謝謝回覆。 – cabaret 2011-05-12 13:20:38

3

也許你應該看看codeIgniter的2.0新特性:package。

包讓你與分享librairies,型號等:

$this->load->add_package_path('/usr/local/codeigniter/shared'); 

閱讀: http://philsturgeon.co.uk/blog/2010/04/codeigniter-packages-modules

希望它能幫助。

+0

謝謝。我會確保檢查出來,沒有聽說過它是誠實的。聽起來可能是我需要的。 – cabaret 2011-05-12 17:19:47

相關問題