2013-03-13 42 views
0

最快的方式可以說我有一個名爲MyView.php一個簡單的視圖文件:最簡單的/的「渲染」查看文件在PHP

<!DOCTYPE html> 
<html> 
    <head> 
     <title><?=$title?></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
        <?=$cotent?> 
    </body> 
</html> 

,我已經在我的代碼的方法叫render()

<? 
function render($data) 
{ 

} 
?> 

我需要從那裏撥打MyView.php並將$title$cotent變量傳遞給它。

我知道有這樣做的只是更換<title><?=$title?></title>到,可以說,<title>{TITLE}</title>然後在render($data)只需加載MyView.php到變量與preg_replace()$blah替換所有{BLAH}的方式。

有沒有其他簡單的方法來做到這一點?

不得使用框架。一切從頭開始。

+3

爲什麼不只是'包含'那個文件 - PHP已經是一個模板語言了。 – 2013-03-13 22:05:10

+0

如果你堅持使用自定義標籤(而不是像@Rick提到的那樣),建立替換數組並使用'str_replace'而不是'preg_replace'。可能會更具性能。 – 2013-03-13 22:06:30

+0

@RichBradshaw我只能包含PHP類。沒意見。否則會是一團糟。 – rinchik 2013-03-13 22:07:13

回答

3

是的。從我個人的庫:

function renderTemplate($tmpl, $__vars=array()) { 
    extract($__vars, EXTR_SKIP); 
    include($tmpl); 
} 

renderTemplate("MyView.php", array("title" => "My Title", "content" => "My Content")); 

如果你想呈現爲一個字符串,你可以稍作修改:

function renderTemplateToString($tmpl, $__vars=array()) { 
    ob_start(); 
    extract($__vars, EXTR_SKIP); 
    include($tmpl); 
    return ob_get_clean(); 
} 

注意renderTemplate()需要被保存在其自身的功能,即使你只調用它一次:它使用函數的變量範圍來保持模板變量與其他變量分離。

+0

Omg!看起來很棒! +1 – rinchik 2013-03-13 22:09:56

+1

也可以很容易地將它與'ob_'函數結合起來以返回內容而不是輸出它.. – Ben 2013-03-13 22:10:56

+1

@rinchik你花時間評論你自己的問題,並說你「只能包含PHP類,而不是視圖」然後你+1一個包含視圖的答案? – 2013-03-13 22:13:57