EZ Publish/EZ Publish 模板变量用法
EZ Publish | EZ Publish安装与卸载 | EZ Publish的使用 | EZ Publish常见问题 | EZ Publish其他 |
模板变量必须以'$'符号开头,如:$my_variable,$object_array,等。变量是大小写敏感的,所以$lollipop与$LolliPop 是不同变量。模板变量可以由系统创建(在PHP 代码中)或由模板的作者创建(在模板代码中)。不论变量在哪里定义,变量可以被"set"函数重新赋值。某些模板变量有预设值,如:主模板(pagelayout)提供了一套预设变量。
创建与销毁变量[ ]
模板中的变量在使用前必须先通过"def"函数定义。变量定义后会一直存在,直到变量被"undef"(稍后解释)函数销毁。在模板中定义的变量在模板的结尾处会被自动销毁。下例演示了"def"和"undef"的基本用法。
{def $temperature=32} {$temperature} {undef}
上例会输出"32“。{undef}之后,$temperature 被销毁。"def“和"undef"可同时用于多个变量。此外,"undef"可以不使用任何参数。当不使用参数时,"undef"会销毁所有之前在当前模板定义的变量。下例演示了如何用"def"和"undef"来定义和销毁多个变量。
{def $weather='warm' $celsius=32 $fahrenheit=90} The weather is {$weather}: {$celsius} C / {$fahrenheit} F {undef $celsius $fahrenheit} The weather is still {$weather}. {undef}
输出:
The weather is warm: 32 C / 90 F The weather is still warm.
上例中,"def"定义了三个变量:$temperature,$celsius 和$fahrenheit。"undef"使用了两次。第一次用来销毁$celsius 和$fahrenheit 变量。第二次没用到任何参数,因而所有剩余的变量(在本例中,只有$temperature)会被销毁。
修改变量内容[ ]
可以用"set"函数为变量赋值。这个函数可以为任何变量赋值,不论它是在模板中还是在PHP 代码中创建的。如果系统变量被赋值,系统不会发出警告。"set"会忽略变量的新/旧类型,换言之,"set"可以修改变量的变量类型。"set"不能用来修改数组的元素,哈希的元素和对象。事实上,数组,哈希表和对象不能在模板中被修改。下例演示了"set"函数的用法。
{def $weather='warm'} The weather is {$weather}. {set $weather='cold'} The weather is {$weather}. {undef}
输出:
The weather is warm. The weather is cold.
与"def"和"undef"一样,"set"可以同时为多个变量赋值。
访问数组元素[ ]
向量数组的元素只能用下表访问。这种方法被成为“下标寻址”。哈希的元素可以通过键值访问。这种方法称为“键值寻址”。下例演示了不同寻址方法。
下标寻址[ ]
下表寻址可以通过在数组名后追加"."和下标来实现。也可以用常规的"[]"方式。下例演示了不同的下表寻址方法(注意不同的语法,"."和"[]")。
{def $sentence=array( 'Life', 'is', 'very', 'good!' )} The 1st element is: {$sentence.0} The 2nd element is: {$sentence.1} The 3rd element is: {$sentence[2]} The 4th element is: {$sentence[3]} {undef}
输出:
The 1st element is: Life The 2nd element is: is The 3rd element is: very The 4th element is: good!
键值寻址[ ]
与下表寻址类似。但是用键值替换下表。下例演示了不同的键值寻址方法。
{def $sentence=hash( 'first', 'Life', 'second', 'is', 'third', 'very', 'fourth', 'good!' )} The 1st element is: {$sentence.first} The 2nd element is: {$sentence.second} The 3rd element is: {$sentence[third]} The 4th element is: {$sentence[fourth]} {undef}
输出:
The 1st element is: Life The 2nd element is: is The 3rd element is: very The 4th element is: good!
访问对象属性[ ]
与哈希的键值寻址类似。但是不支持"[]"方式。下例演示了如何访问对象的不同属性。
The ID of the node: {$node.node_id} The ID of the object encapsulated by the node: {$node.object.id} The name of the object: {$node.object.name} First time the object was published: {$node.object.published|l10n( shortdate )}
如果$node 变量的节点ID 是14,对象ID 是13,对象名为"Birthday“,发布时间是"2003 年4 月1 日",则输出如下:
The ID of the node: 44 The ID of the object encapsulated by the node: 13 The name of the object: Birthday First time the object was published: 01/04/2003