2012-03-01 65 views
2

我正在爲我的web應用程序設計主題佈局。Codeigniter - 如果其他內部視圖

比方說,如果我有兩個控制器,A和B.我想一個視圖來顯示DIV A和B的視圖將利用if($this->router->fetch_class() == 'A') { //display div A }

顯示格B.

我知道如何設置這個控制器內部

但是,如何實現這一目標呢?

回答

3

NOOOO。不要這樣做。 ;)爲這類事情編寫硬編碼的字符串幾乎總是一個不好的方法。你的觀點會變得雜亂無章,祝你好運重命名你的控制器類。

首先,如果這段代碼在你的控制器中,你不知道它是哪個控制器嗎?

這讓我假設這是一個由多個控制器使用的繼承方法,對吧?在這種情況下,有幾個選項:

  1. 覆蓋它在每個孩子的基礎,告訴parent::some_action()方法,你想要顯示的核實。 (的「權威」正確的代表團將在這裏稍後爲您節省一些脫鉤頭痛...)

  2. 而不是使用fetch_class()使用instanceof(讓你的IDE會做繁重的你,如果你曾經重命名班上)。

  3. 考慮將分成子視圖(即partials)。它真的得到凌亂的做一個視圖中的字符串比較。相信。我。

這裏就是我會建議:

<?php 
// Overridden core class 
class MY_Controller extends CI_Controller { 

    public function some_action() 
    { 
     //... 
     if ($this instanceof Controller_class_that_uses_div_a) 
     { 
      $this->load->view('view_for_div_A'); 
     } 
     else 
     { 
      $this->load->view('view_for_div_B'); 
     } 
     //... 
    } 
} 
+1

我自己對這個問題感到困惑。我同意這裏。你不想養成在視圖中做控制器事情的習慣。爲了其他任何人不得不混淆這些代碼,請保持簡單幷包含它。 – 2012-03-01 23:24:52

3

可以具有相同的邏輯控制器,只是傳遞價值減記至您的看法:

$class = $this->router->fetch_class(); 

$this->load->view('myView', 
        array('class' => $class)); 

然後,只需使用該變量在您的視圖:

if ($class == 'A') ... 
+1

哎喲,只是因爲它是不是有些普通字符串,我認爲它不能被傳遞到像that..Thanks.will視圖給它試一試 – foxns7 2012-03-01 16:41:53

+0

是的,沒有我知道的限制;除了字符串之外,其他類型的對象可以傳遞到視圖。 – 2012-03-01 16:58:28