我有一个 PHP 站点,它使用这段代码在主模板中呈现内容页面。
function render($template, $vars = array(), $supertemplates = array()) {
if (is_array($vars)) extract($vars); // Extract the vars to local namespace
else $content = $vars;
ob_start(); // Start output buffering
include($template.'.tpl.php'); // Include the file
$content = ob_get_contents(); // Get the content of the buffer
ob_end_clean(); // End buffering and discard
foreach ($supertemplates as $supertemplate)
$content = render($supertemplate, array('content' => $content));
return $content; // Return the content
}
应用程序本身是一个巨大的文件 index.php(在站点的根目录中),它带有一个路由器,它接受一个参数,然后执行相应的函数。
这是列表功能
function list() {
//Get some data from the database ($data)
print render('templates/_list', array('data' => $data), array('templates/master'));
exit;
}
然后列表模板在其内部呈现另一个模板。但是目前唯一发送到浏览器的html,是列表模板,主模板甚至没有发送到浏览器。我以前见过几次,但它通常会在浏览器刷新后消失。
你知道为什么会这样吗?这只发生在某些模板上,不是全部,但我无法找出原因,因为我不相信在哪些页面可以工作和哪些页面不工作方面存在任何重大差异。