2014-01-07 38 views
0

我使用視圖的組合來構建輸出。目的是在頁面上手動排列視圖,然後用視圖內容填充信息,即頁面排列由控制器完成。佈局:插入文本以排列控制器的視圖

事情是這樣的:

echo "<html>"; 
$this -> load -> view('templates/head', $data); 
$this -> load -> view('templates/header', $data); 
echo "<body>"; 
$this -> load -> view('templates/navigation', $data); 
echo "<main>"; 
$this -> load -> view('users/view',$data); 
echo "</main>"; 
$this -> load -> view('templates/footer', $data); 
echo "</body>"; 
echo "</html>"; 

我遇到的問題是,標籤被輸出,這是隨後與意見的轉儲一起結塊。輸出是沿着這條線:

<html> 
</html> 
<body> 
<main> 
</main> 
</body> 
... Output From each View ... 

有沒有任何人有這種事情的經驗?如何正確設置它。有這site這表明模板可能更有用於此目的。還有一箇舊的discussion/forum/blog,或者至少我假設它是基於類實例化的舊的,它顯示內容分配給$data變量,然後最終在主視圖中繪製所有內容。當我嘗試後者時,就是在將它們放在一起之前將它們一起收集起來。

有什麼辦法可以將html注入輸出嗎?

(我懷疑我錯過了文檔中的一些態度溫和線)


我已經尋找了模板化的東西,我的印象是,我需要從控制器和思想做到這一點它作爲合成。從SO good,oksoso答案。

CI沒有提供默認的模板機制,有一個模板解析器類,但實質上在視圖中進行文本替換。這site顯示如何爲感興趣的人生成一個視圖類。

我最初雖然可能有一個類似於HTML助手類的幫助函數來生成關閉和打開標記,但沒有骰子,因此有關注入的問題。看起來可能有一些使用Output類的控件。

對於那些感興趣的人:我已經用一系列調用其他視圖的模板去看了視圖下的'layout'文件夾。然後<html>/<body>/<main>標籤將調用分配給不同的子視圖'class/view',我將其分配給$data中的數組。子視圖最大的包含元素是<article>。據我所知,這可以將模板抽象保持在最低水平。

+2

你爲什麼要在控制器中產生輸出? – Ryan

+1

查看CI UserGuide - http://ellislab.com/codeigniter/user-guide/general/views.html我相信很好地解釋瞭如何使用視圖。 – Boris

+0

@Stanyer這個想法不是這麼做的,這就是爲什麼我首先問了這個問題,我的代碼開始感到尷尬,這通常表明你是一個更好的方式 – Carel

回答

1

一般來說 - MVC原則應該始終是首選的方法,那麼就不要在控制器中使用echo()語句。應該沒有理由不把你的主要結構標籤放在視圖文件中。

無論其

爲了提高性能笨的觀點是在默認情況下,最終呈現的,這是不是與立即呈現echo()命令的情況。因此,所有回顯數據都將在視圖之前輸出。

您可以通過添加true作爲視圖的第三個參數來更改默認行爲。這將返回視圖數據作爲字符串,然後可以回顯:

echo $this -> load -> view('templates/head', $data, true); 

然後它將按順序呈現。我不會推薦它。

+0

這感覺有點不合MVC-ish。那麼是否有一種標準的方式來佈置頁面的各個部分。有沒有可能是助手/佈局/模板類? (我還沒有在文檔中遇到它,只是在週末纔開始閱讀/使用這個系統) – Carel

+0

那麼你的問題已經解開了MVC-ish! :)我個人習慣於總是隻加載一個視圖文件,然後在該文件中加載我想要的不同視圖部分,如頁眉,頁腳,菜單等。只要記住使用'$ this-> load-> vars($數據);'而不是將其加載到控制器的第二個參數中,以便數據通過。有關模板方法,請參閱http://net.tutsplus.com/tutorials/php/an-introduction-to-views-templating-in-codeigniter/ – jtheman

+1

這是看起來最好的方法。感謝您解釋輸出順序。如果你曾經在南非的JHB/PTA,我會給你買一杯啤酒:) – Carel