2009-04-19 33 views
5

在CodeIgniter或核心PHP中;有沒有相當於Rails的視圖部分和模板?CodeIgniter或PHP等價的Rails部分和模板

的部分將讓我使我的看法裏另一個視圖片段。我可以有一個共同的navbar.php視圖,我可以指向我的homepage.php視圖。模板將在一個地方定義一個HTML頁面的整個外殼,並讓每個視圖填充正文。

我能找到的笨文檔中最接近的事是Loading multiple views,幾個視圖控制器依次呈現。在控制器內口述我的頁面的外觀看起來很奇怪。 (即移動導航欄我的設計師將不得不編輯控制器)。

我一直在搜索堆棧溢出 PHP的方式來實現這一點。我發現this page,其中談到與ob_start模擬部分。這是CodeIgniter內部推薦的方法嗎?

+0

嘗試眼:http://codeigniter.com/wiki/Ocular_Layout_Library/ – Geshan 2010-02-10 04:13:24

回答

13

我可能會違反一些MVC規則,但我總是將我的「片段」放在單獨的視圖中,並從需要它們的其他視圖中加載它們,CodeIgniter風格。幾乎所有的我的意見在頂部和底部加載一個頁眉和頁腳視圖,分別爲:

<? $this->load->view("header"); ?> 
//Page content... 
<? $this->load->view("footer"); ?> 

頭則可能包括在同一個時尚的NavBar等

+1

這是不需要自己的數據部分的方式。但在部分視圖需要數據的情況下(「小部件」),像第三方「模塊化擴展HMVC」是一個不錯的選擇。 – rick 2009-04-20 15:15:00

0

這是不幸的是沒有笨具體可言,不過我建議你看看Savant3模板系統。它允許您將模板呈現爲字符串。然後你可以簡單地將它卡在任何你想要的地方。

也許有類似的東西在笨?

我可以想到一種方法來在渲染視圖,渲染模板以及其包含的所有子模板時添加設施。

3

在PHP中你會使用include

+0

我不知道這是否正是OP是要求。我相信在評估時運行包含的文件; OP要求提供Rails風格的包含(包含的文件首先被評估,IIRC,然後再進行合成)。這對於根據頁面/部分/視圖內容中發生的事情來做決定頁面模板內容的事情有很大的不同。 – 2012-04-17 09:05:14

0

笨和Smarty的很好地一起玩。

5

實際上,這就是我使用:

function render_partial($file, $data = false, $locals = array()) { 
    $contents = ''; 

    foreach($locals AS $key => $value) { 
     ${$key} = $value; 
    } 

    ${$name . '_counter'} = 0; 
    foreach($data AS $object) { 
     ${$name} = $object; 

     ob_start(); 
     include $file; 
     $contents .= ob_get_contents(); 
     ob_end_clean(); 

     ${$name . '_counter'}++; 
    } 

    return $contents; 
} 

這允許你調用是這樣的:

render_partial('/path/to/person.phtml', array('dennis', 'dee', 'mac', 'charlie'), array('say_hello' => true)); 

和/path/to/person.phtml有:

<?= if($say_hello) { "Hello, " } ?><?= $person ?> (<?= $person_counter ?>) 

這是一些神奇的事情,雖然這可能會幫助你更好地瞭解正在發生的事情。完整的文件:view.class.php

+4

提取物($ locals); – Mario 2009-04-20 10:26:37

+0

jeej我tkRenderPartial()很多我自己;)+1 – Ropstah 2010-03-16 22:58:30

2

我發現自己移動導入到CI也是,我對partial的處理基本上是將視圖中的部分作爲變量渲染並從控制器中進行設置。因此,在視圖

你會像(_partial。PHP):

<h2>Here Comes The Partials</h2> 
<?= $some_partials ?> 

而且你可以從像控制器設置:

$this->load->view('the_view', 
    array('some_partials', 
     $this->load->view('_partial', array(), TRUE) 
    ) 
); 

就個人而言,我更喜歡使用CI的觀點,而不是ob_start,但是這是我=) PS:當加載意見,第一個參數是視圖名稱,第二個是要傳遞給視圖的參數,第三個參數是「ECHO」標誌,它基本上告訴CI是直接渲染它還是返回視圖的值,這是基本上我在這個例子中做了什麼。

雖然我不認爲這是一個很好的解決方案,但它適用於我。任何人有更好的解決方案

0

您可以檢查它,因爲諧音和模板

http://code.google.com/p/ocular/wiki/Introduction