【PHP 模板引擎】Prototype 原型版發布!,prototype原型_PHP教程

來源:互聯網
上載者:User

【PHP 模板引擎】Prototype 原型版發布!,prototype原型


在文章的開頭,首先要向一直關注我的人說聲抱歉!因為原本是打算在前端架構5.0發布之後,就立馬完成 PHP 模板引擎的初版。但我沒能做到,而且一直拖到了15年元旦才完成,有很嚴重的拖延症我很慚愧,再次抱歉!

之前有說過以後的作品發布文章都會同步發表相應的 API 使用說明,但我覺得這還不夠好而且部落格平台對錶格的處理和顯示不是很友好,導致 API 不能完美的呈現,因此打算只提供 API 連結,大家可以通過連結直接存取到我的官網去查閱手冊,那樣的閱讀體驗是最好的。而發布的文章以後則更新一些和 API 相關的使用教導,提供一些小例子,讓大家在閱讀 API 的同時,也能夠通過實際例子去更加深刻的體會到代碼的各種用法與商務邏輯思想!

以下是 API 手冊與執行個體示範連結

【執行個體示範】:http://www.shibuyi.net/demo/php/template_engine/prototype

【官方 API 使用手冊】:http://www.shibuyi.net/api/php/template_engine/prototype

【筆者個人官網】:http://www.shibuyi.net

下面為 PHP 模板引擎 Prototype 原型版使用教導,以下直接簡稱:模板引擎!

什嗎?不知道模板引擎是啥?可能會有 PHP 新手會問這樣的問題,那我就簡單的回答一下吧。模板引擎其實就是 PHP 的一個中介軟體技術,讓傳統的 Web 動態網站編程變得更加輕鬆,為什麼這麼說呢?以前不輕鬆嗎?那是因為在模板引擎出現之前,幾乎所有的 Web 服務端程式員都是通過混編程式碼完成工作的,所謂混編就是一張頁面中既包含:PHP 也包含 HTML 甚至還有其他語言的代碼,因此項目如果逐漸擴充,開發和維護的時間成本是極高的,還容易出錯,美工與程式也不好配合,如果美工一點也不理解程式,那基本上沒辦法看混編檔案。而模板引擎的誕生就很好的解決了這一難題。它採用模板引擎技術將混編檔案中的 PHP 商務邏輯層代碼與表現層代碼 HTML 進行了很好的切割分離,程式員則可以安心的設計程式,而美工則安心的設計介面,二者之間會使用一種模板標記的特殊符號進行關聯,方便模板引擎讀模數板檔案之後可以順利的進行編譯操作。市面上 PHP 已經有很多相當成熟的模板引擎了,如:Smarty 模板引擎等等,其他 Web 服務端語言也有自己相應的模板引擎,或者與模板引擎類似的中介軟體技術。

關於模板引擎的詳細介紹,推薦大家訪問百度百科:http://baike.baidu.com/view/4258079.htm

在學習模板引擎之前大家要先保證自己已經瞭解了 PHP 的 OOP(物件導向編程)思想,因為模板技術是採用 OOP 思想描述的,如果不懂 OOP 那麼這篇文章就不適合您閱讀,因為門檻過高!

首先大家看到的圖片是模板引擎的目錄結構圖(筆者使用的是 ZendStudio 7.2.1 整合式開發環境):

1. caches 為模板緩衝目錄(若不存在模板引擎第一次執行會自動產生);

2. classes 為模板引擎核心類庫;

3. compiles 為模板編譯目錄(若不存在模板引擎第一次執行會自動產生);

4. constants 為模板常量目錄(若不存在模板引擎第一次執行會自動產生);

5. includes 為模板配置目錄;

6. templates 為模板檔案目錄(若不存在模板引擎第一次執行會自動產生)。

在瞭解了模板引擎的目錄後,接下來我們就來看看如何讓他運作起來。在原型版中模板引擎的相關初始化和配置資訊都是在 includes/template.inc.php 檔案中完成的(大家可以開啟源碼進行查閱)。

其實對模板引擎的配置又叫做初始化過程,初始化的第一步就是配置相應的目錄,讓模板引擎能夠正確的讀取和寫入該目錄中的資料(配置步驟大家可以自由選擇,不一定非要按照我的順序來配置,但一定要在執行個體化模板引擎之前完成,否則將會失效),而我們則假設與模板引擎在同一目錄下進行配置,如果非同一目錄對於根目錄的配置需要注意調整。

1. 首先第一步是配置模板引擎的根目錄,如果不設定則會自動產生根目錄的絕對路徑。

Template :: $rootPath = dirname(__FILE__); // 相對與絕對路徑均可,我們這裡則採用絕對路徑!如:"C:/wwwroot/prototype"

2. 配置模板檔案目錄,這個目錄是用來存放模板檔案的,如果不設定則預設為:templates 目錄。

// 這裡則採用預設目錄,大家根據自己的需求進行設定,建議不要寫中文容易出錯,目錄名的前後加不加正反斜線都無所謂,最終模板引擎內部會自動校正!Template :: $templateName = '/templates/';

3. 配置編譯檔案目錄,這是用來存在模板檔案被解析後產生的編譯檔案,如果不設定則預設為:compiles 目錄。

Template :: $compileName = '/compiles/'; // 和模板目錄一樣也採用預設目錄。

4. 配置快取檔案目錄,這是在模板引擎開啟緩衝功能後,用來存在編譯檔案產生的快取檔案,如果不設定預設為:caches 目錄。

Template :: $cacheName = '/caches/'; // 一樣使用預設

5. 配置模板常量目錄,可能大家不太理解模板常量是用來幹嘛的,和普通的PHP常量有什麼區別嗎?關於模板常量的解釋,在接下來的運用在我們在詳細探討,這裡就先跟我進行配置即可,如果不設定預設為:constants 目錄。

Template :: $constantName = '/constants/'; // 使用預設

6. 到第六步為止,目錄的配置就全部完成了,大家不用擔心目錄不存在的問題,也不用手動去建立,模板引擎內部會自動幫我們完成。那麼接下來就是設定模板常量的檔案名稱,如果不設定則預設為:default.xml 檔案。

// 我們也採用預設,但大家要注意的是這裡必須採用 .xml 為副檔名,因為常量檔案是以 XML 標記描述的,如果不是 .xml 結尾,那麼可能會導致模板引擎在處理常量時出現異常情況!Template :: $constantFile = 'default.xml';

7. 設定緩衝開關,緩衝預設情況下是被關閉的,只有我們去設定他,才會開啟。

// 大家注意,這裡我寫的是一個布爾值,其實這裡可以填寫任意值,最終都會被隱式轉換為布爾值,寫 0 或 1 都可以,我直接寫布爾值是為了方便大家的理解!Template :: $cacheSwitch = true;

8. 至此模板引擎的配置基本上就已經全部完成了,還是很簡單的。現在我們只需要執行個體化出模板引擎對象,就可以真正的運行模板引擎了。

$tpl = new Template(); // 執行個體化出模板引擎,從這一步開始之前的配置全部生效,模板引擎執行個體化時不需要傳遞任何參數。

9. 在執行個體化出模板引擎對象以後,我們就可以開始對其進行操作,那麼對誰進行操作呢?當然是模板檔案了,首先我們要先建立模板檔案。在模板檔案目錄中進行建立。模板檔案其實是純 HTML 程式碼檔案,副檔名可以自訂,而我們約定俗成,都已 .tpl 為副檔名。假設我們已經建立了一個模板檔案名稱為:index.tpl,因為和我們的 php 商務邏輯檔案 index.php 同名,這也是按照慣例約定俗成,因為 index.php 檔案調用 index.tpl 模板,見名知意。

10. 在建立了模板檔案之後,我們就可以在業務檔案(之前的配置也都是在 index.php 中執行的)中進行對模板檔案的載入以及注入模板變數,關於模板變數和其他的模板標識符(又統稱模板標記)將在接下來的步驟中逐一講解。

// 注入變數的格式有兩種,大家注意看 API 手冊的說明,數組格式與傳統的索引值對格式均可以,我們兩種都使用一下。$tpl -> assign('title', '頭銜'); // 首先是傳統索引值對格式$tpl -> assign(array('title' => '頭銜', 'name' => '名稱')); // 數組格式明顯要更加好用一些,因為在注入多個變數時,就可以不用寫多個注入語句,一句話就搞定了。// 如果出現了兩個一模一樣的變數名稱,那麼其後會將之前的給替換掉。以下代碼,最終 language 變數的值為:英文。$tpl -> assign(array('language' => '中文', 'language' => '英文'));// 接下來是載入模板檔案,直接寫模板名稱即可,模板引擎會自動鎖定到模板檔案目錄。$tpl -> display('index.tpl');

11. 至此對模板引擎的操作就結束了,接下來我們將熟悉一下模板檔案中的各個模板標記的使用方法,他們都是用來做什麼的。在原型版中模板標記一共有 9 種,分別為:1. 模板變數、2. 模板常量、3. 單行模板注釋、4. 多行模板注釋、5. include 檔案載入、6. template 模板檔案載入、7. source 源模板檔案載入(較為特殊)、8. if 分歧語句、9. foreach 迴圈語句。那麼我們首先解釋一下模板變數吧。

<div id="main">            <a href="###">{$title}a>     <a href="###">{$123}a> div>

12. 下面是模板常量的使用,模板常量和 PHP 常量雖然名字上都叫他常量,其實本質上並非一回事。模板常量其實看以看做是偽常量,而並非真正的常量,他是通過對 XML 標記的處理,來保持一組特定不變的值,這些值需要手動的添加到常量檔案中。(手動添加其實不太方便,筆者會在其後的版本迭代中,加入自動添加的功能)

首先我們需要在模板常量檔案中手動添加模板常量,代碼如下:

xml version="1.0" coding="utf-8" ?><root>        <constant>        <key>WEBNAMEkey>         <value>網站標題value>     constant>        <constant>        <key>123abckey>         <value>value>     constant>root>

配置好常量後,接下來就是在模板檔案中進行調用,代碼如下:

<title>{WEBANME}title> <p>{NAME}p> <p>{abc123}p> 

13. 下面是模板的注釋符,有兩種:一種為單行,一種為多行。多用於對模板檔案代碼的註解,可以讓美工配合設計介面的時候瞭解代碼的實際含義。

{@ 普通的單行注釋}  {@ 換行的單行注釋} {#}這是多行行注釋,注意首位呼應!{/#} {#}這是多行行注釋,我換行了!{/#} {#} 沒有寫結尾符號 

14. 模板載入標識符,載入方式分為三類,別分為:include 對普通檔案的直接載入;template 對模板檔案進行編譯後載入;source 對模板檔案進行編譯後直接輸出編譯檔案的路徑(此方法較為特殊且並不完美,需要在特定的場合中使用,比如:架構頁面的調用)

首先是對普通檔案的載入調用,代碼如下:

{include path = "test.php"} {include path = 'abc.php"} {include path = "123.php"} {include path = "123.php"} 

下面是對模板檔案的編譯載入,代碼如下:

{template path = 'test.tpl'} 

最後就是模板檔案的編譯地址的輸出,該功能較特殊,即使不理解也沒關係,該方法有嚴重的 BUG 尚未處理完畢,因此並不完美,且使用的機率也極低,這裡只做簡單的介紹。在其後的版本迭代中,是否會保留並完善,尚在定奪,代碼如下:

<iframe src="{source path = 'frame.tpl'}">iframe>

15. 接下來是經常會被用到的 if 分歧語句,他和 php 的 if 語句很類似,但功能上卻很簡單,且不支援多重判斷以及嵌套判斷,但我會在其後的版本迭代中讓其功能逐步強大。

{if $action} <p>介面1p>{/if}{if !$action} <p>介面2p>{/if}{if $action} <p>介面1p>{else}<p>介面2p>{/if}{if $action} 

16. 終於到了最後的也是複雜的 foreach 迴圈語句的調用了,其功能和 PHP 一樣,只是格式上稍有改動。

{foreach $array(key, value)}    <p>{%key} ... {%value}p> {/foreach}{foreach $userList(id, username)}    <p>{%id} ... {%username}p>     <p>{%password}p> {/foreach}

好了,寫到這裡我也可以長長的舒口氣,模板引擎原型版的教導到此就結束了。雖然教導文章已經很詳細了,但建議大家配合 API 手冊和執行個體代碼進行參照閱讀,這樣效果會更好更便於理解和掌握。當然因為是文章,所以即使你描述的再詳細,文字也是抽象的,需要大家多動手,而對於動手能力較差的新手們,這篇教導文章則起不到多大的作用,可能反而會被弄得一頭霧水,甚至最終對此厭惡,所以我有想過如果以後有可能,在版本迭代更新到一定程度後,我會針對性的出一套系列教導視頻,那樣的話就不會像文字這樣抽象,新手也能夠很快的學習。

如果你是從頭看到尾,那麼我真心感謝您的閱覽,我想你應該有什麼話要想說,請一定要在下面留言告訴我,有問題也請及時留言,謝謝各位的支援~!

http://www.bkjia.com/PHPjc/936672.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/936672.htmlTechArticle【PHP 模板引擎】Prototype 原型版發布!,prototype原型 在文章的開頭,首先要向一直關注我的人說聲抱歉!因為原本是打算在前端架構5.0發布...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.