PHP中TAL模板引擎文法的解析(代碼)

來源:互聯網
上載者:User
這篇文章給大家介紹的內容是關於php TAL模板引擎文法,內容很詳細,有需要的朋友可以參考一下,希望可以協助到大家。

PHP 資料

本文檔的使用到的資料($talData)

//定義talData變數$talData = array();$talData['title'] = 'title1';$talData['key'] = 'key1';$talData['href'] = 'xxx.html';$talData['html'] = '<h1>h1標題</h1>';$talData['fun'] = function($key=''){    return $key === 'key1'? true : false;};//兩維數組$talData['list1'] = array(    array('id'=>'1', 'title'=>'標題1'),    array('id'=>'2', 'title'=>'標題2'),    array('id'=>'3', 'title'=>'標題3'),    array('id'=>'4', 'title'=>'標題4'));
//輸出的資料結構{"title":"title1","key":"key1","href":"xxx.html","html":"h1\u6807\u9898<\/h1>","fun":{},"list1":[{"id":"1","title":"\u6807\u98981"},{"id":"2","title":"\u6807\u98982"},{"id":"3","title":"\u6807\u98983"},{"id":"4","title":"\u6807\u98984"}]}

屬性優先權

  • define 定義變數

  • condition

  • repeat

  • content or replacae

  • attributes 屬性

  • omit-tag

TAL有效空間

定義變數

定義全域(global)變數title和局部變數 key
<p tal:define="global title talData/title; key talData/key">    ${title} && ${key}</p>${title} && ${key}<!-- 結果 --><p>title1 && key1</p>title1 &&
定義預設值變數
<p tal:define="global fname string:fname1 string; lname string:lname1 string;">    ${fname} && ${lname}</p>${fname} && ${lname}<!-- 結果 --><p>fname1 string && lname1 string</p>fname1 string &&

TAL有效空間

定義變數

定義拼接變數
<p tal:define="global hello string:hello $fname welcome on this page">    ${hello}</p>或<p tal:define="global hello string:hello ${fname} welcome on this page">    ${hello}</p><!-- 結果 --><p>hello fname1 string welcome on this page</p>
定義變數,執行php方法
<p tal:define="global rand php: rand(1, 4)">    ${rand}</p><!-- 結果 --><p>2</p>

TAL有效空間

輸出內容

tal:replace="資料" 將用值替代整個標籤,如果沒有賦值將替空
<tal:block>    <p>渲染1</p></tal:block><tal:block tal:replace="">不渲染這裡</tal:block><tal:block tal:replace="talData/title">    <p>不渲染這裡</p></tal:block><p>${talData/title}</p><!-- 結果 --><p>渲染1</p>title1<p>title1</p>
tal:content="資料" 將會替代標籤內的內容
<p tal:content="talData/title">    test data<span>tips</span></p><!-- 結果 --><p>title1</p>

TAL有效空間

輸出內容

${資料}
<p class="p p_${talData/title}">${talData/title}</p><!-- 結果 --><p class="p p_title1">title1</p>
tal:attributes 將會改變tag的屬性或值
<a href="http://www.foo.com" title="some foo link" tal:attributes="href talData/href; title talData/title" tal:content="talData/key">sample link</a><!-- 結果 --><a href="xxx.html" title="title1">key1</a>
tal:on-error="string: 出錯時顯示內容" ;出錯時顯示error內容,並且沒有當前標籤;
<span tal:on-error="string: 當前資料不存在" tal:content="talData/key">key 已經是定義了</span><span tal:on-error="string: 當前資料不存在" tal:content="talData/ky">ky 沒有定義的</span><!-- 結果 --><span>key1</span>當前資料不存在

TAL有效空間

判斷條件

tal:condition="資料",條件是true,標籤和它的內容就會被顯示
<p tal:condition="php: true" tal:content="talData/title">標題</p><p tal:condition="php: talData['key'] == 'key1'" tal:content="talData/key">關鍵詞</p><p tal:condition="php: key == 'key1'" tal:define="key talData/key" tal:content="talData/key">關鍵詞</p><p tal:condition="talData/key" tal:content="talData/key">關鍵詞</p><p tal:condition="talData/fun" tal:content="talData/key">關鍵詞</p><!-- 結果 --><p>title1</p><p>key1</p><p>key1</p><p>key1</p>

TAL有效空間

迴圈

tal:repeat="賦值變數 資料";屬性迴圈它的元素和內容直到結束
<ul tal:repeat="item talData/list1">    <li tal:condition="php: repeat.item.index == 0">        repeat/item/key: ${repeat/item/key} ;(如果talData/list1是一組聯合對象,返回item的鍵)<br/>        repeat/item/index: ${repeat/item/index} ;(返回索引號(0~count-1))<br/>        repeat/item/number: ${repeat/item/number} ;(返回索引號(1~count))<br/>        repeat/item/even: ${repeat/item/even} ;(如果是偶數,true)<br/>        repeat/item/odd: ${repeat/item/odd} ;(如果是奇數,true)<br/>        repeat/item/start: ${repeat/item/start} ;(如果是第一個元素,true)<br/>        repeat/item/end: ${repeat/item/end} ;(如果是最後一個元素,true)<br/>        repeat/item/length: ${repeat/item/length} ;(返回talData/list1裡面元素個數)<br/>        -------------    </li>    <li tal:condition="php: repeat.item.index > 0" tal:content="item/title">列表li</li></ul><!-- 結果 --><li>repeat/item/key: 0 ;(如果talData/list1是一組聯合對象,返回item的鍵)<br/>repeat/item/index: 0 ;(返回索引號(0~count-1))<br/>repeat/item/number: 1 ;(返回索引號(1~count))<br/>repeat/item/even: 1 ;(如果是偶數,true)<br/>repeat/item/odd: 0 ;(如果是奇數,true)<br/>repeat/item/start: 1 ;(如果是第一個元素,true)<br/>repeat/item/end: 0 ;(如果是最後一個元素,true)<br/>repeat/item/length: 4 ;(返回talData/list1裡面元素個數)<br/></li><li>標題2</li><li>標題3</li><li>標題4</li>

TAL有效空間

標籤渲染與否

tal:omit-tag="condition";要求phptal解析時忽略實體的開關閉標籤,它的內容仍然會顯示.
<p tal:omit-tag="php: false">    omit-tag值為真,不出現當前p標籤,否則就出現當前p標籤</p><p tal:omit-tag="php: true">    omit-tag值為真,不出現當前p標籤,否則就出現當前p標籤</p><!-- 結果 --><p>omit-tag值為真,不出現當前p標籤,否則就出現當前p標籤</p>omit-tag值為真,不出現當前p標籤,否則就出現當前p標籤
<tal:block>;代替標籤,標籤永遠不輸出
<tal:block tal:repeat="x php:range(1,10)" tal:content="x">文字會出現十次</tal:block><!-- 結果 -->12345678910

METAL空間 支援宏

metal:define-macro 定義宏
<!-- 在pWeb/_macro/common.html檔案中代碼 --><tal:block metal:define-macro="WinPageData">    <script type="text/javascript">        window.WinPageData = ${structure WinPageData};    </script></tal:block>
metal:use-macro 調用宏
<tal:block metal:use-macro="pWeb/_macro/common.html/WinPageData">    當前內容會被宏替換掉    <script type="text/javascript">        window.WinPageData = {};    </script></tal:block><p metal:use-macro="${路徑變數}/macros.html/main_menu"></p>

METAL空間 支援宏

metal:define-slot 定義宏標籤替換
<!-- 在pWeb/_macro/mlog.html檔案中代碼 --><tal:block metal:define-macro="mobile">    <script>        <metal:block define-slot="mlog_page">        var mlog_page = 'mobile_other';        </metal:block>        var mlog_track = function(){};    </script>    <script src='xxx.js'></script></tal:block>
metal:fill-slot 使用宏標籤替換
<tal:block metal:use-macro="pWeb/_macro/mlog.html/mobile">    <tal:block metal:fill-slot="mlog_page">        var mlog_page = 'mobile_index';    </tal:block></tal:block>

METAL空間 支援宏

宏擷取參數
<!-- 在pWeb/_macro/mlog.html檔案中代碼 --><tal:block metal:define-macro="conent">    <p>${title}</p>    <p>${key}</p></tal:block>
宏傳參數(tal:define)
<tal:block metal:use-macro="pWeb/_macro/mlog.html/conent"  tal:define="title '標題'; key '關鍵詞'"></tal:block>

phptal空間

phptal:debug

phptal:cache 使整個元素(包括標籤)儲存在磁碟而不重新解析直到cache失效,有效期間的格式由數字和'd', 'h','m'或's'組成.
<p class="footer" phptal:cache="3h">...</p>有效期間可以有選擇的跟隨'per'參數來定義多少個緩衝被共用,使用'per url'分別針對每個url複製元素.<ol id="breadcrumbs" phptal:cache="1d per url">...</ol>

使用php:文法

如下所述同正規運算式,除了->被替換成.及變數不需要首碼$,使用空格裝配由點分隔的字串.
php:htmlentities(foo)php:'string ${varReplaced}'php:'string ${some.path().to[0].var}'php:foo.a.b.c(e).htmlentities(SomeClass::staticMethod())php:SomeClass::ConstOfClassphp:SomeClass::$staticVar

使用not:、exists:文法

not:可以用於tal:condition中,相反判斷
<span tal:condition="not: logged">not logged</span><!-- 結果 --><span>not logged</span>
exists:可以用於tal:condition中,判斷存在
<span tal:condition="exists: talData/title" tal:content="talData/title">存在</span><!-- 結果 --><span>title1</span>

使用default、structure文法

default預設值;在 tal:define、tal:content、tal:attributes 使用
<span tal:define="myVar talData/title | default">default my var value</span><p tal:content="some/var | other/path | default">沒有var,沒有找到path</p><a href="unknown.html" title="Unknown page" tal:attributes="href item/href | default; title talData/title | default" tal:content="item/title | default">Unknown page</a><!-- 結果 --><p>沒有var,沒有找到path</p><a href="unknown.html" title="title1">Unknown page</a>

使用structure文法

允許將包括html/xml等變數輸出顯示;

注意存在XSS攻擊風險,謹慎使用

在tal:content中使用
<p tal:content="talData/html"></p><p tal:content="structure talData/html"></p><!-- 結果 --><p>&lt;h1&gt;h1標題&lt;/h1&gt;</p><p><h1>h1標題</h1></p>
在${}中使用
<p>${talData/html}</p><p>${structure talData/html}</p><!-- 結果 --><p>&lt;h1&gt;h1標題&lt;/h1&gt;</p><p><h1>h1標題</h1></p>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.