我建議你保持你的HTML和PHP分開。如果你不想使用模板系統,爲什麼你不這樣做?
做一個HTML模板:
<div id="wrapper">
<div id="leftsidebar">{LEFT}</div>
<div id="centercontent">{CONTENT}</div>
<div id="rightsidebar">{RIGHT}</div>
</div>
在不同的php文件:
$content = file_get_contents('template.html');
$templateVars = array();
startVar('CONTENT');
echo '<p>This is the content.</p>'; // New template vars are also allowed
endVar('CONTENT');
echo replaceTemplateVars($content);
/**
* Replace template variables recursively with the key-value pairs that are in the $templateVars queue
* @param string $content (default NULL) is code to convert.
* @return the string that is replaced
*/
function replaceTemplateVars($content = NULL)
{
global $templateVars;
$matches = array();
preg_match_all("/{[A-Z0-9_:]*}/", $content, $matches); // $matches = All vars found in your template
foreach($matches[0] as $key)
{
if(isset($templateVars[substr($key, 1, -1)]))
{
$content = str_replace($key, $templateVars[substr($key, 1, -1)], $content); // Substitute template var with contents
}
else
{
$content = str_replace($key, "", $content); // Remove empty template var from template
}
}
// Check if the replacement has entered any new template variables, if so go recursive and replace these too
if(preg_match_all("/{[A-Z0-9_:]*}/", $content, $matches))
{
$content = replaceTemplateVars($content);
}
return $content;
}
/**
* Start output buffer for a template key
* @param string $key is not used. Only for overview purposes
*/
function startVar($key)
{
ob_start();
}
/**
* End output buffer for a template key and store the contents of the output buffer in the template key
* @param string $key
*/
function endVar($key)
{
setVar($key, ob_get_contents());
ob_end_clean();
}
/**
* @param string $key to store value in
* @param mixed $value to be stored
*/
function setVar($key, $value)
{
global $templateVars;
$templateVars[$key] = $value;
}
這是你得到你的屏幕上的內容:
<div id="wrapper">
<div id="leftsidebar"></div>
<div id="centercontent"><p>This is the content.</p></div>
<div id="rightsidebar"></div>
</div>
所以預處理完成首先輸出所有的html代碼。
當然,您可以添加像startPrependVar()
和startAppendVar()
這樣的函數,並將所有內容都包裝到Template類中以擺脫全局範圍。
更好的**上下文**? – 2012-04-12 12:10:00
優化結構,加載更快。 – BBKing 2012-04-12 12:12:25
定義優化結構。另外,更快的加載?它們基本相同。如果有的話,你不會在兩者之間削減一毫秒。如果你想要性能,不要使用'include',這會強制操作系統在文件上執行'stat'。但是,爲了代碼清晰和可維護性,您決不應該交易(最小)性能。 – 2012-04-12 12:17:26