2010-11-10 22 views
1

嘗試學習CI並瀏覽文檔以獲得更好的理解。沒有得到一個單獨的庫,我可以通過包括觀看像這樣一個列表中進行模板:獲取CodeIgniter的掛件 - 模板/加載視圖

$this->load->view('header'); 
$this->load->view('navigation'); 
$this->load->view('sidenav_open'); 
$this->load->view('blocks/userinfo'); 
$this->load->view('blocks/stats'); 
$this->load->view('sidenav_close'); 
$this->load->view('content',$data); 
$this->load->view('footer'); 

這是有道理的,但我真的有一個對我的每一個控制器(頁)?不知道是否有辦法將它包含在初始控制器中(歡迎),然後以其他方式引用它?或者可能有些東西我完全缺失

+0

請問一些這樣的事情:http://stackoverflow.com/questions/2617742/codeigniter-php-calling-a-view-from-within-a-view是更多的標準? – kilrizzy 2010-11-10 15:57:20

回答

9

您可以從視圖文件中加載視圖。例如,考慮一個普通的頁面模板稱爲page_template.php

<html> 
<body> 
    <div id = "header"> 
     <?php $this->load->view('header');?> 
     <?php $this->load->veiw('navigation');?> 
    </div> 
    <div id = "sidenav"> 
    <?php $this->load->view('sidenav');?> 
    </div> 
    <div id = "content"> 
    <?php echo $content;?> 
    </div> 

    <div id = "footer"> 
     <?php $this->load->view('footer');?> 
</body> 
</html> 

通過利用CodeIgniter的abiltiy的裝入更多的活力的地區返回一個視圖作爲控制器的變量:

$template['content'] = $this->load->view('content',$data,TRUE); 
$this->load->view('page_template',$template); 

通過傳遞TRUE對於加載函數,CI將從視圖返回數據而不是輸出到屏幕。

您的sidenav部分可能是它自己的視圖文件sidenav.php,其中您的'塊'硬編碼或加載類似於上面的示例。

我已經完成了兩種方法,包括每個控制器方法中每個視圖的一些視圖,並使用加載子視圖和動態區域的頁面模板,到目前爲止,第二種方法讓我更開心。

+2

這很重要,所以我只想澄清一點:將'true'作爲第三個參數傳遞給視圖加載器方法會返回視圖的確切輸出_as a string_。當您在異步請求期間加載視圖並且您想使用JavaScript將HTML字符串插入到DOM中時,這非常有用。 – treeface 2010-11-10 19:59:11

1

從視圖中加載視圖可能會導致混淆。

擴展Controller類隱藏了來自該方法的大部分複雜性,但仍然利用通過在每次頁面加載時渲染一次來生成常見視圖(頁腳,頁眉,導航欄等)的想法。

具體來說,請查閱CI用戶指南和wiki,以獲得對MY_Controller的引用 - 您可以通過在./libraries目錄中創建一個MY_Controller.php文件來擴展它。

在那裏您可以調用視圖片段,也可以使用load->view()調用的第三個參數= 功能。您可以將這些加載到$this->data - 例如將頁腳加載到$this->data['footer']。在您的各種控制器中,繼續將視圖數據添加到$this->data。在你的觀點中 - 我通常使用的模板除了骨架HTML和一些基本CSS以外沒有其他任何東西,然後回顯整個頁眉,頁腳,導航和主要內容塊,作爲變量取自$this->data

增加的獎勵 - 對於CI新手,你很可能很快會尋找如何做其他事情,一個MY_Controller會讓你變得容易:)

我有一個關於簡化視圖部分的生成和顯示的維基頁面,就像你想在這裏做,使用MY_Controller在:

https://github.com/EllisLab/CodeIgniter/wiki/Header-and-Footer-and-Menu-on-every-page---jedd

+0

您的鏈接已死亡。一個完美的例子說明爲什麼答案應該完全「獨立」。 – Sparky 2012-12-07 23:00:34

+0

感謝您的有益建議。嵌入了答案。鏈接另一端的剩餘信息。 – jedd 2013-01-06 11:52:00