2015-07-06 34 views
0

我正在開發一個項目,我將所有HTML內容與PHP代碼的其餘部分分開。通過函數調用發送每個需要爲PHP變量分析HTML的實例。大多數這些處理來自數據庫的動態數據。PHP:將變量插入模板文件--include()或file_get_contents()?

一個模板文件的一個簡單的例子:

$output .= $html->load_template('template_id', array('id' => 123, 'text' => 'Testing')); 

<div id='{$data['id']}'>{$data['text']}</div> 

的$數據陣列中的變量通過函數調用,其中HTML代碼段需要被添加到輸出緩衝器通過

html :: load_template()函數只是定位正確的文本文件,應該加載變量並將字符串作爲HTML返回。這是我遇到的問題:

public static function load($template, $data=array()) { 
     ob_start(); 
     include (TEMPLATE . $template .'.tpl'); 
     ob_flush(); 
    } 

我一直在使用包括嘗試()和file_get_contents()函數,但無濟於事 - 我在尋找一個簡單的解決方案,我可以使用{$數據['var']}語法,最好將模板HTML保留爲一個簡單變量,以便將其添加到輸出中。

我試圖避免使用eval()。

有人可以給我一些指導?

回答

0

我已經做了同樣的事情在過去,你可以修改你的代碼如下所示:

public static function load($template, $data=array()) { 
    ob_start(); 
    include (TEMPLATE . $template .'.tpl'); 
    $getData = ob_get_clean(); 
    preg_match_all("|{([^>].*)}|U", $getData, $getDataArr, PREG_SET_ORDER); 
    if (is_array($getDataArr) && count($getDataArr) > 0) { 
     foreach ($getDataArr as $php) { 
      if (strpos($php[1],'$') !== false) { 
       $getData= str_replace($php[0], (eval('return $'.str_replace('$', '', $php[1]).';')), $getData); 
      } 
     } 
    } 

    echo $getData; 
}