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