2010-06-01 67 views
2

我的代碼庫存在問題。爲了將數據庫數據轉換爲導航並具有活動元素等,我構建了一個庫類CI_Navigation()。 它工作得很好,我只有一個問題。CodeIgniter庫多個實例

經常在一個具有相應的網頁但分離導航例如頂部的主導航和副導航。爲了解決這個問題,我可以用一個參數來初始化我的類,告訴它該導航要保存哪個級別。 我會例如做這樣的事情。

$this->load->library('Navigation'); 

$main = $this->navigation->build(array('levels'=>array(0))); 
$sub = $this->navigation->build(array('levels'=>array(1,2))); 

正如你所期望這是行不通的,因爲在類中的數據保持它被建造的第一個呼叫分配的方式。

可悲的是CI中圖書館是單身(是嗎?這是我讀)。所以我不能初始化它兩次,如:

$this->load->library('Navigation','','main'); 
$this->load->library('Navigation','',sub); 

你有什麼想法我可以克服這個問題。

它應該工作,如果我會用數組在類權使用的變量? 例如爲選項而不是使用$ this->選項,我將不得不動態創建$ this - > $ option [0],$ this - > $ option [1]。

這是行不通的?我目前無法測試,但今晚會這樣做。但這不是一個非常優雅的方式,那麼有沒有更好的方法來解決這個問題?有什麼辦法可以多次初始化圖書館嗎?

在此先感謝你們。

回答

7

如果你想堅持嚴格的CI庫實現,那麼我建議你讓你的類參數配置的陣列;然後指定您想要在「構建」功能中使用的配置。

$options = array 
(
    'main' => array('level' => 0), 
    'sub' =>array('level' => 1) 
); 

$this->load->library('navigation', $options); 

$main_nav = $this->navigation->build('main'); 
$sub_nav = $this->navigation->build('sub'); 

但我常常恢復到標準的對象爲這樣的事情:

$a_navigator = new Navigation($options_a); 
$b_navigator = new Navigation($options_b); 

$a_tree = $a_navigator->build(); 
$b_tree = $b_navigator->build(); 

unset($a_navigator); 
unset($b_navigator); 
+0

歐凱,謝謝你, 第一個解決方案是關於我的想法,所以我會嘗試一下,讓你知道它是否有效。無論如何感謝您的回答。 – 2010-06-01 12:55:03

+0

是的,它的工作原理。完美,非常感謝。 我實際上是在討論使用選項數組的第一個版本。我沒有嘗試其他方法。 – 2010-06-01 18:26:12

+0

非常好,我很高興它爲你工作! – Kurucu 2010-06-01 20:25:54

0

或者你可以做這樣的東西:

$this->load->library('navigation'); 
$this->another_navigation = clone($this->navigation);