PHPTAL模板引擎

PHPTAL模板引擎语法 PHP 数据

本文档的使用到的数据($talData)
//定义talData变量 $talData = https://www.it610.com/article/array(); $talData['title'] = 'title1'; $talData['key'] = 'key1'; $talData['href'] = 'xxx.html'; $talData['html'] = '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
${title} && ${key}${title} && ${key}title1 && key1 title1 &&

定义默认值变量
${fname} && ${lname}${fname} && ${lname}fname1 string && lname1 string fname1 string &&

TAL有效空间 定义变量
定义拼接变量
${hello}
或${hello}
hello fname1 string welcome on this page

定义变量,执行php方法
${rand}
2

TAL有效空间 输出内容
tal:replace="数据" 将用值替代整个标签,如果没有赋值将替空
渲染1
不渲染这里 不渲染这里
${talData/title}
渲染1
title1title1

tal:content="数据" 将会替代标签内的内容
test datatips
title1

TAL有效空间 输出内容
${数据}
${talData/title}
title1

tal:attributes 将会改变tag的属性或值
sample linkkey1

tal:on-error="string: 出错时显示内容" ;出错时显示error内容,并且没有当前标签;
key 已经是定义了 ky 没有定义的key1 当前数据不存在

TAL有效空间 判断条件
tal:condition="数据",条件是true,标签和它的内容就会被显示
标题
关键词
关键词
关键词
关键词
title1
key1
key1
key1

TAL有效空间 循环
tal:repeat="赋值变量 数据";属性循环它的元素和内容直到结束
  • repeat/item/key: ${repeat/item/key} ;(如果talData/list1是一组联合对象,返回item的键)
    repeat/item/index: ${repeat/item/index} ;(返回索引号(0~count-1))
    repeat/item/number: ${repeat/item/number} ;(返回索引号(1~count))
    repeat/item/even: ${repeat/item/even} ;(如果是偶数,true)
    repeat/item/odd: ${repeat/item/odd} ;(如果是奇数,true)
    repeat/item/start: ${repeat/item/start} ;(如果是第一个元素,true)
    repeat/item/end: ${repeat/item/end} ;(如果是最后一个元素,true)
    repeat/item/length: ${repeat/item/length} ;(返回talData/list1里面元素个数)
    -------------
  • 列表li
  • repeat/item/key: 0 ;(如果talData/list1是一组联合对象,返回item的键)
    repeat/item/index: 0 ;(返回索引号(0~count-1))
    repeat/item/number: 1 ;(返回索引号(1~count))
    repeat/item/even: 1 ;(如果是偶数,true)
    repeat/item/odd: 0 ;(如果是奇数,true)
    repeat/item/start: 1 ;(如果是第一个元素,true)
    repeat/item/end: 0 ;(如果是最后一个元素,true)
    repeat/item/length: 4 ;(返回talData/list1里面元素个数)
  • 标题2
  • 标题3
  • 标题4

  • TAL有效空间 标签渲染与否
    tal:omit-tag="condition";要求phptal解析时忽略实体的开关闭标签,它的内容仍然会显示.
    omit-tag值为真,不出现当前p标签,否则就出现当前p标签
    omit-tag值为真,不出现当前p标签,否则就出现当前p标签
    omit-tag值为真,不出现当前p标签,否则就出现当前p标签
    omit-tag值为真,不出现当前p标签,否则就出现当前p标签

    ;代替标签,标签永远不输出
    文字会出现十次12345678910

    METAL空间 支持宏 metal:define-macro 定义宏

    metal:use-macro 调用宏
    当前内容会被宏替换掉

    METAL空间 支持宏 metal:define-slot 定义宏标签替换

    metal:fill-slot 使用宏标签替换
    var mlog_page = 'mobile_index';

    METAL空间 支持宏 宏获取参数
    ${title}
    ${key}

    宏传参数(tal:define)

    phptal空间 phptal:debug phptal:cache 使整个元素(包括标签)保存在磁盘而不重新解析直到cache失效,有效期的格式由数字和'd', 'h','m'或's'组成.
    ... 有效期可以有选择的跟随'per'参数来定义多少个缓存被共享,使用'per url'分别针对每个url复制元素.

    使用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::ConstOfClass php:SomeClass::$staticVar

    使用not:、exists:语法 not:可以用于tal:condition中,相反判断
    not loggednot logged

    exists:可以用于tal:condition中,判断存在
    存在title1

    使用default、structure语法 default默认值;在 tal:define、tal:content、tal:attributes 使用
    default my var value【PHPTAL模板引擎】没有var,没有找到path
    Unknown page没有var,没有找到path
    Unknown page

    使用structure语法 允许将包括html/xml等变量输出显示;
    注意存在XSS攻击风险,谨慎使用
    在tal:content中使用
    < h1> h1标题< /h1> h1标题

    在${}中使用
    ${talData/html} ${structure talData/html}< h1> h1标题< /h1> h1标题

    相关资料
    • 官网
    • php手册

      推荐阅读