用PHP製作靜態網站的模板框架_PHP教程
模板能夠改善網站的結構。本文闡述如何透過PHP 4的一個新功能和模板類,在由大量靜態HTML頁面構成的網站中巧妙地運用模板控制頁面佈局。
提綱:
===================================
分離功能和版面
避免頁面元素重複
靜態網站的模板框架
======== ===========================
分離功能和佈局
首先我們來看看應用模板的兩個主要目的:
分離功能(PHP)和佈局(HTML)
避免頁面元素重複
第一個目的是談論得最多的目的,它設想的情況是:一組程式設計師編寫用於產生頁面內容的PHP腳本,同時另一組設計人員設計HTML和圖形以控制頁面的最終外觀。分離功能和佈局的基本思想是使得這兩組人能夠各自編寫和使用獨立的一組文件:程式設計師只需關心那些只包含PHP程式碼的文件,無需關心頁面的外觀;而頁面設計人員可以用自己最熟悉的視覺化編輯器設計頁面佈局,無需擔心破壞任何嵌入到頁面的PHP程式碼。
如果你曾經看過幾個關於PHP模板的教程,那麼你應該已經明白模板的工作機制。考慮一個簡單的頁面局部:頁面的上方是頁頭,左邊是導覽條,其餘部分是內容區域。這種網站可以擁有以下範本檔案:
{HEADER} | |
{LEFTNAV} | {CONTENT } |

Foo
Bar
可以看出頁面如何由這些模板構造而成:main模板控制著整個頁面的佈局;header模板和leftnav模板控制著頁面的公共元素。花括號「{}」裡面的識別字是內容佔位符。使用範本最主要的好處是介面設計者能夠按照自己的意願編輯這些文件,例如設定字體、修改顏色和圖形,或完全改變頁面的佈局。介面設計者可以用任何普通HTML編輯器或視覺化工具編輯這些頁面,因為這些檔案都只包含HTML程式碼,沒有任何PHP程式碼。 PHP程式碼全部保存到單獨的檔案中,這個檔案也就是由頁面URL實際呼叫的檔案。 Web伺服器透過PHP引擎解析該文件,然後把結果傳回瀏覽器。一般地,PHP程式碼總是動態地產生頁面內容,例如查詢資料庫或執行某種計算等。以下是一個範例:
// example.php
require('class.FastTemplate.php');
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav' => 'leftnav.htm' ) );
// 此處的PHP程式碼設定$content使其包含適當的頁面內容
$tpl->assign('CONTENT', $content);
$tpl ->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main');
$tpl->FastPrint('MAIN');
?>
這裡我們使用的是流行的FastTemplate模板類,但其基本思路對於其他許多模板類來說都對於其他許多模板類來說都一樣。首先你實例化一個類,告訴它到哪裡去尋找模板文件以及哪一個模板文件與頁面的哪部分對應;接下來是生成頁面內容,把結果賦予內容的標識符;然後,依次解析各個模板文件,模板類別將執行必要的替換操作;最後把解析結果輸出到瀏覽器。
這個檔案完全由PHP程式碼構成,不包含任何HTML程式碼,這是它最大的優點。現在,PHP程式設計師可以專注於編寫產生頁面內容的程式碼,而不必為瞭如何產生HTML去正確地格式化最終頁面而擔心。
你可以用這個方法和上面的檔案建構出一個完整的網站。如果PHP程式碼是以URL中的查詢字串為基礎產生頁面內容,例如http://www.foo.com/example.php?article=099,你可以據此建構出一個完整的雜誌網站。
很容易看出採用模板還有第二個好處。如上例所示,頁面左邊的導覽條單獨儲存為一個文件,我們只需編輯這一個範本文件就可以改變網站所有頁面左邊的導覽條。 避免頁面元素重複
“這確實不錯”,你也許會想,“我的網站主要是由大量的靜態頁面構成。現在我可以從所有頁面中刪除它們的公共部分,要更新這些公共部分實在太麻煩了。以後我就可以用模板製作出很容易維護的統一頁面佈局。 」但事情並非這麼簡單,「大量的靜態頁面」道出了問題的所在。
請考慮上面的例子。這個例子實際上只有一個example.php頁面,它之所以能夠生成整個網站的所有頁面,是因為它利用了URL中的查詢字串從資料庫之類的資訊來源動態地建構出頁面。資料庫支援。 🎜> 最簡單的方法是為每一個頁面複製一份PHP文件,然後在每一個頁面中把PHP程式碼裡代表內容的變數設定成合適的頁面內容。 home)、關於(about)和產品(product),我們可以用三個檔案分別產生它們。 home.php
require('class.FastTemplate.php');
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main. htm',
'header' => 'header.htm',
'leftnav' => 'leftnav.htm' ) );
$content = "
歡迎參觀 p>
希望你能喜歡本網站
";$tpl->assign('CONTENT', $content);
$tpl->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', ' main');
$tpl->FastPrint('MAIN');
?>
顯然,這種方法有三個問題:我們必須為每個頁面複製這些複雜的、牽涉到模板的PHP代碼,這與重複公共頁面元素一樣使得頁面難以維護;現在文件又混合了HTML和PHP代碼;為內容變量賦值將變得非常困難,因為我們必須處理好大量的特殊字符。 靜態網站的模板框架
首先,我們像前面一樣為所有的頁面公用元素以及頁面整體佈局編寫模板文件;然後從所有的頁面刪除公共部分,只留下頁面內容;接下來再在每頁加上三行PHP程式碼,如下圖:
你好
歡迎造訪

希望你能喜歡本網站
? >
這種方法基本上解決了前面提到的各種問題。現在檔案裡只有三行PHP程式碼,而且沒有任何一行程式碼直接涉及模板,因此要改變這些程式碼的可能性極小。此外,由於HTML內容位於PHP標記之外,所以也不存在特殊字元的處理問題。我們可以很容易地將這三行PHP程式碼加入所有靜態HTML頁面中。
require函數引進了一個PHP文件,這個文件包含了所有必需的與範本相關的PHP程式碼。其中pageStart函數設定模板物件以及頁面標題,pageFinish函數解析模板然後產生結果發送給瀏覽器。
這是如何實現的呢?為什麼在呼叫pageFinish函數之前文件中的HTML不會傳送給瀏覽器?答案就在於PHP 4的一個新功能,這個功能允許把輸出到瀏覽器的內容截獲到緩衝區之中。讓我們來看看prepend.php的具體程式碼:
require('class.FastTemplate.php');
function pageStart($title = '') {
GLOBAL $tpl;
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav'=> 'leftnav.htm' ) );
$tpl->assign('TITLE', $title);
ob_start() ;
}
function pageFinish() {
GLOBAL $tpl;
$content = ob_get_contents();
ob_end_clean();
$tpl-assign(. CONTENT', $content);
$tpl->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl-> parse('MAIN', 'main');
$tpl->FastPrint('MAIN');
}
?> pageStart函數首先建立並設定了一個範本實例,然後啟用輸出快取。此後,所有來自頁面本身的HTML內容都將進入快取。 pageFinish函數取出快取中的內容,然後在範本物件中指定這些內容,最後解析範本並輸出完成後的頁面。

這就是整個模板框架的全部工作過程了。首先編寫包含了網站各個頁面公共元素的模板,然後從所有頁面中刪除全部公共的頁面佈局代碼,代之以三行永遠無需改動的PHP代碼;再把FastTemplate類文件和prepend.php加入到包含路徑,這樣你就得到了一個頁面佈局可以集中控制的網站,它有著更好的可靠性和可維護性,而且網站級的大範圍修改也變得相當容易。
本文下載套件包含了一個可運行的範例網站,它的程式碼註解比前面的程式碼註解更詳細一些。 FastTemplate類別可以在http://www.thewebmasters.net/找到,最新的版本號碼是1.1.0,那裡還有一個用於保證該類別在PHP 4中正確運行的小補丁。本文下載程式碼中的類別已經經過該補丁的修正。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
