2013-06-06 41 views
2

我正在使用codeigniter來處理各種公司使用的項目。更改Codeigniter中的視圖行爲

我們的軟件的默認版本已啓動並運行正常,但我們的某些客戶希望其系統實例的視圖文件略有不同。

理想情況下,我想要做的就是設置一個變量(例如VIEW_SUFFIX),並且只要加載了視圖文件,它就會首先檢查是否存在可用的後綴版本,如果有的話可以使用。

例如,如果系統有一個名爲'my_view.php'的標準視圖文件,但是一個客戶端的VIEW_SUFFIX是'client_1' - 每當我調用$ this-> load-> view('my_view')VIEW_SUFFIX設置它會首先檢查my_view_client_1是否存在(以及它是否使用了它)或者如果不使用默認的my_view.php。

我希望我的問題已經夠清楚了......如果有人以前做過這個或者可以想辦法做到這一點,我會非常感激。

編輯: 理想情況下,我想要一個解決方案,沒有我改變我調用視圖文件的每個地方。首先,因爲有可能需要不同的客戶端版本,也因爲視圖文件是從大量的控制器

+0

這可以通過創建助手來完成,或者 「'_render($ PARAM = 」default_suffix「)'」 功能[我的意思,創造新的'私有函數_render()'在每個控制器或'core'控制器中。 – Kyslik

+0

這可以工作 - 理想情況下,我不想改變所有視圖被調用的位置 - 所以如果有某種方式實際改變$ this-> load-> view功能的工作方式,那將是理想的但這絕對是朝着正確方向邁出的一步:) Thankyou – user2458963

回答

1

我有這類似的要求幾個文件,我創建了一個輔助函數。除此之外,該功能可以在加載指定的視圖文件之前檢查後綴。此功能可以檢查後綴並在加載之前檢查文件是否存在。

不幸的是,文件檢查邏輯會有點脆弱。作爲替代方案,您可以實施MY_Loader類,該類將覆蓋基本的CI_Loader類。

像這樣的事情在你的application/core/MY_Loader.php

class MY_Loader extends CI_Loader { 
    protected function _ci_load($_ci_data) 
    { 
     // Copy paste code from CI with your modifications to check prefix. 
    } 
} 
+0

這看起來很扁平化 - 將研究這個並讓你知道它是怎麼回事! Thankyou :) – user2458963

+0

真棒這個完美的作品!再次感謝 – user2458963

0

叫你能不能做到這一點

// some method of creating $client 
// probably created at login 
$_SESSION['client'] = 'client_1'; 

$client = (isset($_SESSION['client'])) ? $_SESSION['client'] : ''; 
$this->load->view("your_view{$client}", $data); 
+0

這與Kyslik的想法類似 - 在Session或配置中存儲客戶端並不是一個大問題,但這仍然需要我編輯我要調用的每個地方查看文件... 我會盡量讓它在我原來的問題中更明顯,但謝謝你的幫助:) – user2458963