您好,登錄后才能下訂單哦!
這篇文章主要介紹PHP中Smarty模板如何實(shí)現(xiàn)模板繼承,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
{extends}
模板繼承中,你可以在子模板內(nèi)使用{extends}標(biāo)簽來擴(kuò)展父模板。
1.{extends}必須放在模板的第一行。
2.如果子模板要用{extends}來擴(kuò)展父模板,那么它只能有 {block}的區(qū)域。
3.任何其他的模板內(nèi)容都會(huì)被忽略。
擴(kuò)展使用在$template_dir 之外的文件,請(qǐng)使用模板資源的語法。
Note
當(dāng)你擴(kuò)展一個(gè)父模板名稱的變量如{extends file=$parent_file},
請(qǐng)確保$parent_file變量放到同一個(gè) $cache_id中. 否則Smarty無法辨別不同的$parent_file變量。
parent.php頁面
<?php //創(chuàng)建smarty對(duì)象 require_once './libs/Smarty.class.php'; //定義根目錄 define('ROOT', str_replace("\\", "/",dirname(__FILE__))."/"); //實(shí)例化Smarty類 $smarty=new Smarty(); //設(shè)定定界符 $smarty->left_delimiter="<{"; $smarty->right_delimiter="}>"; //設(shè)置為false 定界符號(hào)左右可以有空格 $smarty->auto_literal = false; //添加一個(gè)插件的目錄 //$smarty->setPluginsDir(ROOT."/libs/myplugins/"); //注意添加一個(gè)插件,要把系統(tǒng)默認(rèn)設(shè)置的路徑加入 否則不能使用默認(rèn)系統(tǒng)的插件 $smarty->setPluginsDir(array( ROOT."/libs/plugins/",//系統(tǒng)默認(rèn)設(shè)置的路徑 ROOT."/libs/myplugins/",//自定義的 )); //變量輸出 $smarty->display('parent.tpl'); ?>
child.php頁面
<?php //創(chuàng)建smarty對(duì)象 require_once './libs/Smarty.class.php'; //定義根目錄 define('ROOT', str_replace("\\", "/",dirname(__FILE__))."/"); //實(shí)例化Smarty類 $smarty=new Smarty(); //設(shè)定定界符 $smarty->left_delimiter="<{"; $smarty->right_delimiter="}>"; //設(shè)置為false 定界符號(hào)左右可以有空格 $smarty->auto_literal = false; //變量輸出 $smarty->display('child.tpl'); ?>
parent.tpl頁面
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <title><{block name="one"}>This is a title<{/block}></title> </head> <body> <{block name="two"}>This is a content....<{/block}> <{block name="three"}>我是<{/block}> <{block name="four"}>中國<{/block}> <{block name="five"}>電影<{/block}> <{block name="six"}>我要去<{$smarty.block.child}>上大學(xué)<{/block}> </body> </html>
child.tpl頁面
<{extends 'parent.tpl'}> <{block name="one"}>我是第一個(gè)block<{/block}> <{block name="two"}>我是第二個(gè)block<{/block}> <{block name="three" append}>津沙港灣<{/block}> <{block name="four" prepend}>我愛你,<{/block}> <{block name="five" }>你喜歡看<{$smarty.block.parent}>嗎?<{/block}> <{block name="six" }>上海<{/block}>
瀏覽器輸出(child.php頁面輸出)
我是第二個(gè)block 我是津沙港灣 我愛你,中國 你喜歡看電影嗎? 我要去上海上大學(xué)
模板繼承
繼承是從面向?qū)ο缶幊潭鴣淼母拍睢?/p>
模板繼承可以讓你定義一個(gè)或多個(gè)父模板,提供給子模板來進(jìn)行擴(kuò)展。
擴(kuò)展繼承意味著子模板可以覆蓋部分或全部父模板的塊區(qū)域。
繼承結(jié)構(gòu)可以是多層次的,所以你可以繼承于一個(gè)文件,而這個(gè)文件又是繼承于其他文件,等等。
在覆蓋父模板的{block}塊以外的地方, 子模板不能定義任何內(nèi)容。
任何在{block}以外的 內(nèi)容都會(huì)被自動(dòng)忽略。
在子模板和父模板中的{block}內(nèi)容,可以通過 append 和 prepend來進(jìn)行合并。
{block}的選項(xiàng),和 {$smarty.block.parent} 或 {$smarty.block.child}會(huì)持有這些內(nèi)容。
模板繼承在編譯時(shí)將編譯成單獨(dú)的一個(gè)編譯文件。
對(duì)比效果相似的{include}包含模板功能,模板繼承的性能更高。
子模板繼承使用{extends}標(biāo)簽, 該標(biāo)簽一定放要在子模板的第一行。
另一種做法是將整個(gè)模板繼承樹,在PHP程序調(diào)用fetch() 或 display()的時(shí)候,
用extends:的模板資源類型,該做法有更大的靈活性。
Note
當(dāng)開啟了$compile_check,繼承樹里面的全部文件都會(huì)在每次調(diào)用的時(shí)候檢查是否有修改。
因此,在生產(chǎn)環(huán)境中你最好關(guān)閉$compile_check。
Note
如果你的子模板里面有用到{include} 來包含模板,而被包含的模板里面存在供{include}模板 調(diào)用的{block}區(qū)域, 那么在最頂層的父模板里面,你需要放置一個(gè)空的 {block} 來作為繼承。
以上是“PHP中Smarty模板如何實(shí)現(xiàn)模板繼承”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。