2010-06-28 24 views
0

我试图想出一个办法做到这一点:从模板使用标题(“位置”),包括文件/程序包括并保存在变量

我想有一个核心的模板文件(structure.php ):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<?php include_once(NAKIDROOT."includes/head.php"); ?> 
</head> 
<body> 
<div id="all"> 
    <div id="page"> 
    <?php include_once("includes/header.php"); ?> 
    <div id="main"> 
     <div id="left"> 
     <?php include_once("includes/left.php"); ?> 
     </div> 
     <div id="content"> 
     <?php include_once("includes/messages.php"); ?> 
     <?php include_once("includes/page.php"); ?> 
     </div> 
     <?php include_once("includes/footer.php"); ?> 
    </div> 
    </div> 
</div> 
</body> 
</html> 

我想包括有,如果需要运行头(位置)的能力,因此它似乎我需要以某种方式让PHP读取每个那些包含文件。

有没有办法来渲染包括检查头和事第一,并把它的内容在变,所以我的结构档将被替代是这样?:

<div id="page"> 
    <?php echo($header); ?> 
    <div id="main"> 
     <div id="left"> 
     <?php echo($left); ?> 
     </div> 
     <div id="content"> 
     <?php echo($messages); ?> 
     <?php echo($page); ?> 
     </div> 
     <?php echo($footer); ?> 
    </div> 
    </div> 
+0

也许真正的问题是,你的观点驱动你的网页。 – zneak 2010-06-28 19:19:58

回答

4

您不能发送头在HTTP响应正文开始之后(即,在输出内容之后,这包括<?php标签之外的内容)。快速修复是使用输出缓冲使用ob_start()和相关功能。这只是一个创可贴;你应该尝试重构你的代码,所以如果可能的话,你不必依靠输出缓冲。

要使用ob_start(),只需在顶部调用它,然后在脚本底部调用ob_end_flush()

+0

打败我吧。输出缓冲将允许您的包含发送标题,因为在您明确发送内容之前没有实际发送内容,或脚本终止。 – timdev 2010-06-28 19:16:17

+0

+1“这只是一个创可贴;你应该尝试重构你的代码,所以你不必依赖输出缓冲如果可能的话。” – 2010-06-28 19:20:09

+0

它如何使用输出缓冲可用/不好/慢?我正在尝试这种方法,用于我正在开发的CMS,可以分布在多个Linux服务器上,这就是为什么我确实想让包含页面文件非常简单的原因。 – kilrizzy 2010-06-28 19:41:12