2011-01-20 70 views
4

我呼籲load_template()PHP:簡單的模板引擎

函數這個函數有兩個參數

  • $名稱=>此模板的名稱
  • $瓦爾=>的關鍵陣列=>值模板中要替換的變量。

我想這樣工作的方式是。

模板( '測試'),我希望能寫

<?php echo $title; ?> 

然後調用

load_template('test', array('title' => 'My Title')); 

,並把它填出來。

我該怎麼做?


輸出緩衝方法。 我已經拿出下面的代碼。
我相信它可以改進。

public static function template($name, $vars = array()) { 
    if (is_file(TEMPLATE_DIR . $name . '.php')) { 
    ob_start(); 
    extract($vars); 
    require(TEMPLATE_DIR . $name . '.php'); 
    $contents = ob_get_contents(); 
    ob_end_clean(); 
    return $contents; 
    } 
    throw new exception('Could not load template file \'' . $name . '\''); 
    return false; 
} 
+0

你能告訴我們你到目前爲止有什麼嗎? – jasonbar 2011-01-20 20:27:53

+0

ob-way是好的,如果你需要返回的內容。但是,除了一些罕見的例外情況,我認爲沒有用。爲什麼不讓它直接進入瀏覽器? – 2011-01-20 20:45:37

+0

標準包括什麼錯誤?你是模板變量名嗎?爲什麼是$ title =「我的標題」;包含「test.templ」不夠? – 2011-01-20 21:15:27

回答

10
function load_template($name, $vars) 
{ 
    extract($vars); 
    include $name; 
} 

纏上ob_start,如果你想捕捉到一個變量輸出ob_get_clean

2

像這樣的東西?

function load_template($name, $vars) 
{ 
    include('template/'.$name.'.tpl'); //.tpl, .inc, .php, whatever floats your boat 
} 

template/whatever.tpl你必須:

... 
<title><?php echo $vars['title'] ?></title> 
... 

... 
<?php if (!empty($vars['content'])): //template still needs to know if the content is empty to display the div ?> 
    <div id="content"> 
<?php echo $vars['content']; ?> 
    </div> 
<?php endif; ?> 
... 

當然,這假定輸出直接打印。 你可以直接打印tpl文件,或者生成一個字符串,或者緩存tpl文件的輸出並將其返回load_template