2012-12-10 47 views
1

對於我的Codeigniter網站,我開始爲每個控制器情況製作一個視圖。這是不切實際的,因爲它需要回到每個代碼進行更改。所以我改變了方法,並在可選字段的「默認」控制器上進行操作。然後我想我可以根據需要加載特殊視圖。Codeigniter的複合視圖?

我把這個視圖與可選字段放在一起,字段爲$title,$search_bar開/關等。但是,現在出現了內容區域。我能夠使用加載更多的意見納入此默認視圖:

 $data['content_views'][]='blocks/login'; 

     $this->load->view('default/a', $data); 

,並在「default'view:

if(isset($content_views)&& (is_array($content_views))) 
    { 
     foreach($content_views as $content_view) 
     { 
      $this->load->view(&$content_view); 
     } 
    } 

(和正常工作) 兩個問題:

  1. 我是否會讓事情變得複雜?這是一個可接受的方式嗎?或者我誤解了一個觀點的功能以及他們打算如何工作?

  2. 我想去mix$content_view,即一段文字,然後是一個視圖。我不太確定如何繼續。假設我首先需要一個消息,然後是一個視圖,然後是更多的文本。此方法將只接受視圖。

任何人可以幫助我建立這個靈活的方法呢?

回答

1

是的,我會說你讓事情有點複雜。儘管我可能沒有足夠詳細地描述你的描述,但我可以告訴你我是如何做到的:

首先,整個網站通過模板運行,所以頁眉和頁腳是容器文件,所有站點內需要的觀點都呈現爲頁面類型視圖 - 像一個文章頁面,畫廊頁等組件加載並傳遞到的意見作爲字符串:

$content['sidebar'] = $this->load->view('components/sidebar', $data, true); 

,去年真說要呈現爲字符串。

本質上,這意味着頁面視圖是非常多的HTML與PHP呼應出必要的元素。沒有意見調用其他意見,這就是我讀你的例子。

CI負荷的觀點逐步,所以你的控制器可輸出像這樣:

$this->load->view('header', $header_data); 

$view_data['sidebar'] = $this->load->view('components/sidebar', $sidebar_data, true); 
$this->load->view('content', $view_data); 

$this->load->view('footer', $footer_data); 

和內容來看,處理側邊欄像這樣:

<?php if(isset($sidebar)): ?> 
<nav> 
    <?php echo $sidebar; ?> 
</nav> 
<?php endif; ?> 

而且,假設你填充這些陣列來每個視圖都會呈現標題,然後是內容,然後是頁腳。如果它存在,也會渲染側邊欄。

因此,結合一切,我基本上說,你可以逐步加載你的控制器的部分,將子視圖作爲字符串傳遞給任何一個部分。這可以讓您的視圖在控制器所在的位置進行控制,而不是在視圖文件本身中進行控制。根據我的經驗,我不必寫一個非常複雜的網站,如果網站計劃好的話,這個網站並不是完全適合的。

+0

謝謝!你說得對,我做的事情比我應該做的要複雜得多。我現在明白了我應該怎麼做:D 如果我需要追加一個字段而不是某個區域,我可以使用第一行並用'。='添加它,需要:) – MaxQ

+0

即使連接可能會過多,如果你想追加。我會通過任何補充作爲他們自己的變量。但是,再一次,你可能有理由像你說的那樣去做。 –