2016-12-21 88 views
2

我是一名PHP初學者。我在很多教程中看到他們建議用include來替換頁面的頭部。但是標題和描述應該在每個頁面上有所不同。所以,我不明白。有沒有辦法解決這個問題?或者如果如果想要有獨特的標題和描述,我不應該包括頭部?最佳做法是什麼?包含頭部和獨特標題

(我理解的實用程序包括:如果我必須做出改變我只需要一個地方去。)

樣品頁面:

<!DOCTYPE HTML> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 

<title>Title of the page</title> 
<meta name="description" content="Description of the page"> 
<link rel="stylesheet" href="externs/stylesheet/general.css" > 
</head> 
<body> 

<div>Content</div> 

</body> 
</html> 

在同一頁將頭放在另一個頁面中包含

include "head.php"; 
<div>Content</div> 
include "footer.php"; 
+0

」推薦以包含頁面的頭部替換「 - 請注意這一點。除非您的PHP文件每個都生成格式正確的片段 - 即生成「」和「」之間的所有內容均爲OK,但不是「」至「」,否則您的代碼將無法管理。 – symcbean

回答

0

包含文件不必是靜態的。您可以創建您的head.phpfooter.php並在其中使用一些PHP代碼。例如:

<?php 
// head.php 
$title = getPageTitle(); // you need to implement a way of getting a title here 
?> 
<!-- html code skipped --> 
<title><?= $title ?></title> 

您可以在您的footer.php中做類似的事情。這裏面臨的挑戰是定義一個數據源,從中獲取這些文件中的動態信息,並且不會破壞主代碼中的任何內容。

include "head.php"; // here head.php is dynamic by itself 
<div>Content</div> 
include "footer.php"; // and footer.php also knows what to do 
+1

你的答案有錯字。你打算說「模板引擎」,但你意外地輸入了一些與MVC無關的東西。 – PeeHaa

0

尤里的建議,使用的header.php和footer.php無疑提供了一個更易於管理的網站,複製跨越許多不同的PHP文件相同的造型和結構化的HTML。但是根據我在其他地方的評論,在生成格式良好的HTML時很難實現這些。你的代碼也應該分解成可管理的單元 - 因此,'$ title'的創建和使用可能會在代碼中的不同位置(範圍)。

當然,您應該儘量減少在包含文件的_main上下文中運行的代碼量 - 它應該只在明確調用時才執行。使用單個文件可以簡化維護工作 - 例如

<?php 

include('project/templater.inc.php'); 
$t=new template(); 
t->pre_output(); 
print "<html>\n"; 
$t->head("My test page"); 
$t->page_start(); 
// all entry point scripts contain something like the above, and a page_end() 
// next, all the page specific stuff.... 
?> 

    <div>Hello world</div> 

<?php 
$t->page_end(); 
print "</html>"; 
$t->clean_up(); 

許多Web框架通過使用一個前端控制器圖案解決這個問題 - 的所有請求被髮送到負責處理頁面的所有公共元素的特定腳本(CSS/JavaScript的相關性,包括道路,普通的HTML片段例如作爲導航,驗證身份驗證)。

我個人喜歡使用依賴注入 - ,其中有一個單獨的包含文件提供用於產生這些片段可調用功能/方法,然後調用這些從腳本直接尋址通過網址:

<?php 

include("project/stdpage.inc.php"); 

render_page('content_for_this_page'); 

function content_for_this_page() 
{ 
    print "<div>Hello world</div>\n"; 
} 

在這裏,其中包括當文件被調用時,文件只會定義包括「render_page()」的函數,在某些時候,它知道需要合併一些頁面特定的內容 - 這是由參數中的回調定義的。 「

+0

我只是不明白。正如我所說,我是一名初學者 – Nrc