2010-06-28 95 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