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><h1>h1标题</h1></p><p><h1>h1标题</h1></p>
在${}中使用<p>${taldata/html}</p><p>${structure taldata/html}</p><!-- 结果 --><p><h1>h1标题</h1></p><p><h1>h1标题</h1></p>
相关文章推荐:
php的学习--php加密,php学习--php加密_php教程
以上就是php中tal模板引擎语法的解析(代码)的详细内容。
