溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP模板引擎Prototype怎么配置

發(fā)布時(shí)間:2021-10-19 13:48:07 來(lái)源:億速云 閱讀:132 作者:小新 欄目:web開(kāi)發(fā)

這篇文章主要為大家展示了“PHP模板引擎Prototype怎么配置”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“PHP模板引擎Prototype怎么配置”這篇文章吧。

1. 首先第一步是配置模板引擎的根目錄,如果不設(shè)置則會(huì)自動(dòng)生成根目錄的絕對(duì)路徑。

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

2. 配置模板文件目錄,這個(gè)目錄是用來(lái)存放模板文件的,如果不設(shè)置則默認(rèn)為:templates 目錄。

// 這里則采用默認(rèn)目錄,大家根據(jù)自己的需求進(jìn)行設(shè)置,建議不要寫(xiě)中文容易出錯(cuò),目錄名的前后加不加正反斜杠都無(wú)所謂,最終模板引擎內(nèi)部會(huì)自動(dòng)校正!
Template :: $templateName = '/templates/';

3. 配置編譯文件目錄,這是用來(lái)存儲(chǔ)模板文件被解析后生成的編譯文件,如果不設(shè)置則默認(rèn)為:compiles 目錄。

Template :: $compileName = '/compiles/'; // 和模板目錄一樣也采用默認(rèn)目錄。

4. 配置緩存文件目錄,這是在模板引擎開(kāi)啟緩存功能后,用來(lái)存儲(chǔ)編譯文件生成的緩存文件,如果不設(shè)置默認(rèn)為:caches 目錄。

Template :: $cacheName = '/caches/'; // 一樣使用默認(rèn)

5. 配置模板常量目錄,可能大家不太理解模板常量是用來(lái)干嘛的,和普通的 PHP 常量又有什么區(qū)別?關(guān)于模板常量的解釋?zhuān)诮酉聛?lái)的運(yùn)用中我們?cè)谠敿?xì)探討,這里就先跟我進(jìn)行配置即可,如果不設(shè)置則默認(rèn)為:constants 目錄。

Template :: $constantName = '/constants/'; // 使用默認(rèn)

6. 到第六步為止,目錄的配置就全部完成了,大家不用擔(dān)心目錄不存在的問(wèn)題,也無(wú)需手動(dòng)去創(chuàng)建,模板引擎內(nèi)部會(huì)自動(dòng)幫我們完成。那么接下來(lái)就是設(shè)置模板常量的文件名稱(chēng),如果不設(shè)置則默認(rèn)為:default.xml 文件,和目錄一樣不存在模板引擎會(huì)自動(dòng)創(chuàng)建。

// 我們也采用默認(rèn),但大家要注意的是這里必須采用 .xml 為擴(kuò)展名,因?yàn)槌A课募且?nbsp;XML 標(biāo)記描述的,如果不是 .xml 結(jié)尾,那么可能會(huì)導(dǎo)致模板引擎在處理常量時(shí)出現(xiàn)異常情況!
Template :: $constantFile = 'default.xml';

7. 設(shè)置緩存開(kāi)關(guān),緩存默認(rèn)情況下是被關(guān)閉的,只有我們?nèi)ピO(shè)置他,才會(huì)開(kāi)啟。

// 大家注意,這里我寫(xiě)的是一個(gè)布爾值,其實(shí)這里可以填寫(xiě)任意值,最終都會(huì)被隱式轉(zhuǎn)換為布爾值,寫(xiě) 0 或 1 都可以,我直接寫(xiě)布爾值是為了方便大家的理解!
Template :: $cacheSwitch = true;

8. 至此模板引擎的配置基本上就已經(jīng)全部完成了,還是很簡(jiǎn)單的?,F(xiàn)在我們只需要實(shí)例化出模板引擎對(duì)象,就可以真正的運(yùn)行模板引擎了。

$tpl = new Template(); // 實(shí)例化出模板引擎,從這一步開(kāi)始之前的所有配置全部生效,模板引擎實(shí)例化時(shí)不需要傳遞任何參數(shù)。

9. 在實(shí)例化出模板引擎對(duì)象以后,我們就可以開(kāi)始對(duì)其進(jìn)行操作,那么對(duì)誰(shuí)進(jìn)行操作呢?當(dāng)然是模板文件了,首先我們要先創(chuàng)建模板文件。在模板文件目錄中進(jìn)行創(chuàng)建。模板文件其實(shí)是純 HTML 代碼文件,擴(kuò)展名可以自定義,而我們約定俗成,都以 .tpl 為擴(kuò)展名。假設(shè)我們已經(jīng)創(chuàng)建了一個(gè)模板文件名為:index.tpl,因?yàn)楹臀覀兊?php 業(yè)務(wù)邏輯文件 index.php 同名,這也是按照慣例約定俗成,因?yàn)?index.php 文件調(diào)用 index.tpl 模板,見(jiàn)名知意。

10. 在創(chuàng)建了模板文件之后,我們就可以在業(yè)務(wù)文件(之前的配置也都是在 index.php 中執(zhí)行的)中進(jìn)行對(duì)模板文件的加載以及注入模板變量,關(guān)于模板變量和其他的模板標(biāo)識(shí)符(又統(tǒng)稱(chēng)模板標(biāo)記)將在接下來(lái)的步驟中逐一講解。

// 注入變量的格式有兩種,大家注意看 API 手冊(cè)的說(shuō)明,數(shù)組格式與傳統(tǒng)的鍵值對(duì)格式均可以,我們兩種都使用一下。
$tpl -> assign('title', '頭銜'); // 首先是傳統(tǒng)鍵值對(duì)格式
$tpl -> assign(array('title' => '頭銜', 'name' => '名稱(chēng)')); // 數(shù)組格式明顯要更加好用一些,因?yàn)樵谧⑷攵鄠€(gè)變量時(shí),就可以不用寫(xiě)多個(gè)注入語(yǔ)句,一句話就搞定了。

// 如果出現(xiàn)了兩個(gè)一模一樣的變量名稱(chēng),那么其后會(huì)將之前的給替換掉。以下代碼,最終 language 變量的值為:英文。
$tpl -> assign(array('language' => '中文', 'language' => '英文'));// 接下來(lái)是加載模板文件,直接寫(xiě)模板名稱(chēng)即可,模板引擎會(huì)自動(dòng)鎖定到模板文件目錄。
$tpl -> display('index.tpl');

11. 至此對(duì)模板引擎的操作就結(jié)束了,接下來(lái)我們將熟悉一下模板文件中的各個(gè)模板標(biāo)記的使用方法,他們都是用來(lái)做什么的。在原型版中模板標(biāo)記一共有 9 種,分別為:1. 模板變量、2. 模板常量、3. 單行模板注釋、4. 多行模板注釋、5. include 文件加載、6. template 模板文件加載、7. source 源模板文件加載(較為特殊)、8. if 分歧語(yǔ)句、9. foreach 循環(huán)語(yǔ)句。那么我們首先解釋一下模板變量吧。

<div id="main">
    <!-- 剛剛我們注入了 title 變量,那么在模板文件中就可以對(duì)其進(jìn)行調(diào)用了,調(diào)用方法就是保持同名,按照這樣的格式抒寫(xiě)即可{$模板變量名稱(chēng)}-->
    <!-- 模板變量的命名規(guī)范與 PHP 普通變量一模一樣,首位不能為數(shù)字,且區(qū)分大小寫(xiě),注意保證格式的正確性,如果錯(cuò)誤模板引擎將不會(huì)對(duì)其進(jìn)行解析 -->
    <a href="###">{$title}</a> <!-- 正確的格式,被正確解析 -->
    <a href="###">{$123}</a> <!-- 錯(cuò)誤的格式,無(wú)法解析 -->
</div>

12. 下面是模板常量的使用,模板常量和 PHP 常量雖然名字上都叫他常量,其實(shí)本質(zhì)上并非一回事。模板常量其實(shí)可以看做是偽常量,而并非真正的常量,他是通過(guò)對(duì) XML 標(biāo)記的存儲(chǔ),來(lái)實(shí)現(xiàn)一種全局不變的特定值,這些值需要手動(dòng)的添加到常量文件中。(手動(dòng)添加其實(shí)不太方便,筆者會(huì)在其后的版本迭代中,加入自動(dòng)添加的功能)

首先我們需要在模板常量文件中手動(dòng)添加模板常量,代碼如下:

<?xml version="1.0" coding="utf-8" ?>
<root>
    <!-- 必須在 root 根標(biāo)記中間進(jìn)行添加,而且一個(gè)標(biāo)記字母都不能出錯(cuò),注意區(qū)分大小寫(xiě),如果不慎寫(xiě)錯(cuò),模板引擎將無(wú)法對(duì)其進(jìn)行獲取 -->
    <constant>
        <key>WEBNAME</key> <!-- 這里填寫(xiě)常量名稱(chēng)注意字母必須全部大寫(xiě),第一位不能為數(shù)字,格式與 PHP 定義常量一樣 -->
        <value>網(wǎng)站標(biāo)題</value> <!-- 常量值 -->
    </constant>
    
    <constant>
        <key>123abc</key> <!-- 錯(cuò)誤的常量名 -->
        <value></value> <!-- 值可以為空 -->
    </constant>
</root>

 配置好常量后,接下來(lái)就是在模板文件中進(jìn)行調(diào)用,代碼如下:

<!-- 模板常量的調(diào)用和變量類(lèi)似,只是取消了 $ 符號(hào),另外和配置的常量名要保持一致 -->
<title>{WEBANME}</title> <!-- 正確的名稱(chēng),將被正確解析 -->
<p>{NAME}</p> <!-- 雖然格式正確,但剛才沒(méi)有進(jìn)行 NAME 常量的配置,因此最終解析后會(huì)返回一個(gè)空值 -->
<p>{abc123}</p> <!-- 錯(cuò)誤的名稱(chēng),無(wú)法解析 -->

13. 下面是模板的注釋符,有兩種:一種為單行,一種為多行。常用于對(duì)模板文件代碼的注解,可以讓美工配合設(shè)計(jì)界面的時(shí)候了解代碼的實(shí)際含義。

<!-- 大家可以把模板注釋放到 HTML 注釋符號(hào)中,這樣美工在設(shè)計(jì)模板頁(yè)面的時(shí)候會(huì)更加一目了然。-->
<!-- 單行注釋的格式是:{@}內(nèi)容可寫(xiě)可不寫(xiě),但不寫(xiě)也就沒(méi)有意義了 -->
{@ 普通的單行注釋} <!-- 正確的格式 -->
<!-- {@ HTML 注釋符號(hào)中的單行注釋} --> <!-- 正確的格式 -->
{@ 換行的
單行注釋} <!-- 格式錯(cuò)誤,單行注釋無(wú)法換行,模板引擎無(wú)法解析 -->
<!-- 多行注釋的格式是:{#}...{/#}一頭一尾要呼應(yīng),內(nèi)容也可以不寫(xiě) -->
{#}這是多行注釋?zhuān)⒁馐孜缓魬?yīng)!{/#} <!-- 正確的格式 -->
{#}這是多行注釋?zhuān)?
我換行了!{/#} <!-- 正確的格式 -->
{#}沒(méi)有寫(xiě)結(jié)尾符號(hào) <!-- 錯(cuò)誤的格式,模板引擎無(wú)法解析 -->

14. 模板加載標(biāo)識(shí)符,加載方式分為 3 類(lèi),別分為:include 對(duì)普通文件的直接加載;template 對(duì)模板文件進(jìn)行編譯后加載;source 對(duì)模板文件進(jìn)行編譯后直接輸出編譯文件的路徑(此方法較為特殊且并不完美,需要在特定的場(chǎng)合中使用,比如:框架頁(yè)面的調(diào)用)

首先是對(duì)普通文件的加載調(diào)用,代碼如下:

<!-- 注意抒寫(xiě)格式,被直接加載的文件多半是 php 文件,且文件必須要存在,不存在的文件,模板引擎將會(huì)給出一個(gè)錯(cuò)誤提示,并且終止代碼的執(zhí)行 -->
<!-- 文件名前后的引號(hào),單雙引號(hào)都可以,但必須保持一致,不能一單一雙,否則模板引擎將不會(huì)對(duì)其解析 -->
{include path = "test.php"} <!-- 正確的格式,將被解析 -->
{include path = 'abc.php"} <!-- 錯(cuò)誤的格式,無(wú)法被解析 -->
<!-- 如果出現(xiàn)了同一個(gè)文件被加載了兩次,那么模板引擎只會(huì)對(duì)其加載第一次后,自動(dòng)忽略其后的加載 -->
{include path = "123.php"} <!-- 第一次被加載成功 -->
{include path = "123.php"} <!-- 與上一個(gè)文件同屬一個(gè)文件,將無(wú)法被再次加載,而被自動(dòng)忽略 -->

下面是對(duì)模板文件的編譯加載,代碼如下:

<!-- 格式與 include 方式基本一樣,就不重復(fù)闡述了,不一樣的是 include 是需要給出具體的路徑地址,而 template 則只需要給出模板名稱(chēng)即可,模板引擎會(huì)自動(dòng)找到該模板文件 -->
{template path = 'test.tpl'} <!-- 正確的格式,將會(huì)被編譯后加載 -->

最后就是模板文件的編譯地址的輸出,該功能較特殊,即使不理解也沒(méi)關(guān)系,該方法有嚴(yán)重的 BUG 尚未處理完畢,因此并不完美,且使用的概率也極低,這里只做簡(jiǎn)單的介紹。在其后的版本迭代中,是否會(huì)保留并完善,尚在定奪,代碼如下:

<!-- 這里我們將使用 iframe 框架頁(yè)面,來(lái)調(diào)用 source 加載方法,調(diào)用格式與前兩種雷同,就不在闡述 -->
<!-- 這樣使用其實(shí)就可以了,但有嚴(yán)重的 BUG 出現(xiàn),原因是所有在 frame.tpl 中注入的模板標(biāo)記被解析后,將無(wú)法找到源頭,也就是說(shuō) php 將無(wú)法對(duì)其正確處理,并且因?yàn)闊o(wú)法找到源頭,而會(huì)報(bào)錯(cuò),該 BUG 的解決方案還在研究中,這里僅提供給大家思考 -->
<iframe src="{source path = 'frame.tpl'}"></iframe>

15. 接下來(lái)是經(jīng)常會(huì)被用到的 if 分歧語(yǔ)句,他和 php 的 if 語(yǔ)句很類(lèi)似,但功能上卻很簡(jiǎn)單,且不支持多重判斷以及嵌套判斷,但我會(huì)在其后的版本迭代中讓其功能逐步強(qiáng)大。

<!-- if 語(yǔ)句的格式其實(shí)和多行注釋一樣,一定要注意首位呼應(yīng),但大小寫(xiě)無(wú)所謂都能夠支持和 PHP 原生的 if 語(yǔ)句是一樣的。 -->
{if $action} <!-- 只要被注入的 {$action} 變量的值為 true,或隱式轉(zhuǎn)換后為 true,那么 if 語(yǔ)句中的代碼將被顯示 -->
<p>界面1</p>
{/if}

{if !$action} <!-- 加入了邏輯非的判斷,只要為 false 則被顯示 -->
<p>界面2</p>
{/if}

{if $action} <!-- 雙層判斷的時(shí)候,為 true 時(shí)顯示界面1,為 false 時(shí)顯示界面2 -->
<p>界面1</p>
{else}
<p>界面2</p>
{/if}

{if $action} <!-- 錯(cuò)誤的格式,沒(méi)有結(jié)尾,不會(huì)被模板引擎解析 -->

16. 終于到了最后的也是最復(fù)雜的 foreach 循環(huán)語(yǔ)句的調(diào)用了,其功能和 PHP 一樣,只是格式上稍有改動(dòng)。

<!-- 注意在調(diào)用 foreach 和 if 語(yǔ)句一樣要首尾呼應(yīng),而且如果變量不是數(shù)組格式,那么 php 將會(huì)自動(dòng)報(bào)出一個(gè)錯(cuò)誤 -->
<!-- 其中 $array 就是被注入的模板變量,注意要是數(shù)組格式;而 key 和 value 則是對(duì)應(yīng)數(shù)組中的鍵值對(duì),必須寫(xiě),否則格式不正確,將無(wú)法被模板引擎解析 -->
{foreach $array(key, value)}
    <p>{%key} ... {%value}</p> <!-- 注意鍵值對(duì)可以不是 key 和 value,但一定要和之前同名,否則無(wú)法被解析 -->
{/foreach}

{foreach $userList(id, username)}
   <p>{%id} ... {%username}</p> <!-- 自定義的鍵值對(duì),格式正確 -->
   <p>{%password}</p> <!-- 錯(cuò)誤的格式,并沒(méi)有被定義,因此無(wú)法被解析 -->
{/foreach}

以上是“PHP模板引擎Prototype怎么配置”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI