2011-05-05 29 views
1

我有一個名爲'sub_nav'的視圖,它目前擁有每個部分鏈接的多維數組。該視圖查看控制器名稱以獲取當前部分,然後遍歷相應的數組集合並輸出鏈接。代碼點火器:控制器或視圖中的導航邏輯?

該工程的作品,但它感覺就像我應該創建一個控制器只是爲導航?並使sub_nav更簡單,但只輸出....?誰可以建議?

$controllerName = $this->router->class; 
$methodName = $this->router->method; 

$subLinks['about'] = array( 
         'introduction' => 'Introduction', 
         'people'  => 'Our People' 
        ); 

$subLinks['contact'] = array( 
         'singapore'  => 'Singapore', 
         'japan'   => 'Japan' 
        ); 

?> 

<ul> 
    <?php foreach($subLinks[$controllerName] as $link=>$linkName){ ?> 

    <li <?php if($methodName == $link){ ?>class="on"<? } ?>><a href="<?php echo base_url(); ?><?php echo $controllerName ?>/<?php echo $link ?>/"><?php echo $linkName ?></a></li> 

    <? } ?> 
</ul> 

`

回答

1

如果內容是靜態陣列,我會把它放進之一:

  • 查看文件。控制器不是唯一可以加載的視圖,從另一個視圖文件(您的模板)中調用$this->load->view()沒有任何問題。只需將數組存儲在那裏的視圖邏輯。
  • 配置文件。聽起來很奇怪,但它是這樣的靜態數據的理想場所。這樣,您不必在每次load-> view()調用中不斷加載數據。只需加載配置文件MY_Controller什麼的,你可以在任何地方訪問它。然後,您可以編寫一個導航視圖或庫,它將輸出您發送給它的任何導航數組(換句話說,不要在此處執行任何HTML - 只是數據,然後用於視圖中的配置項目)。我說要使用基本控制器,因爲可能不需要自動加載此數據,例如針對AJAX請求。你不會總是需要它。

它絕對不屬於控制器,它更多用於處理請求和數據。圖書館是更有可能的候選人。如果內容是動態的(例如從數據庫),那麼你肯定會使用模型或庫,但在這種情況下,我更喜歡一個視圖文件。除了視圖之外,您不太可能在其他任何地方使用導航數組數據。

無論如何,只要有可能,HTML都屬於視圖。如果只在視圖中使用導航數組,則只能在一個視圖中使用,而且不是動態的,只需將其存儲在視圖文件中即可。模型和庫應該是可重用的,在那裏存儲靜態數據(你可能需要經常更新)對我來說沒有意義,但我願意傾聽對手。

+0

對,所以我現在所做的並不是完全不好的形式? – gio 2011-05-05 23:32:16

+0

沒有。我認爲這是最佳的。爲什麼要將數據從視圖邏輯中分離出來,如果它不是動態的並且只在該視圖中使用的話?你只是在創建一個數組,所以創建html更容易。就我個人而言,我有一個導航庫,可以根據您輸入的任何導航數組創建HTML,並且我總是在視圖中定義這些數組,然後立即運行'$ this-> navigation-> create($ my_nav_array)'。 – 2011-05-05 23:35:58

+0

你一定要使用模板庫檢出。我敢肯定,那裏有很多相似的好東西。我沒有使用過,因爲我有我自己的,我不會因爲瘋狂的定製而分心。只是一個建議,你會厭倦很快地調用'$ this-> load-> view('header')''。 – 2011-05-05 23:39:24

0

根據其中用於導航的數據從何而來,我可能給它自己的模型(如果它來自例如數據庫)。至於選擇導航顯示的邏輯,我會將該邏輯放在一個通用的基礎控制器中,或者在所有頁面加載時運行它,或者將代碼放在基本控制器的一個方法中,以便那些需要它的頁面可以使用它。

如果您的控制器使用類似$ this-> data的東西來保存要發送到視圖的數據,那麼基本控制器邏輯也可以將導航數據傳遞給視圖。

+0

謝謝。所有頁面將使用它,並且數據(鏈接/鏈接標題數組)是靜態的 - 所以我應該將它保存在控制器中?儘管把這個放在一個共同的基礎控制器,你說 – gio 2011-05-05 23:09:10

+0

是的,這將工作正常。如果您希望將來可以更容易地擴展,那麼您可能希望將該數組放在存根模型中,但目前在控制器中顯然會很好。 – ZoFreX 2011-05-05 23:11:09

+0

我明白了。另一個Q(我第一次進入CI)是將它放入圖書館的另一個合理選擇嗎?我正在尋找一個非常基本的模板類,它包含一切頁眉和頁腳,並且導航欄出現在頁眉內。那麼所有這些都可以放在模板類/庫中?或者是不是做過的事情......謝謝 – gio 2011-05-05 23:23:39