Smarty,它是最流行的 PHP 模板引擎之一。Smarty “代码” 有它自己的语法和运算符扩展列表,但是系统并不难学。阅读或浏览 Smarty 文档,以便熟悉它的所有功能。从 Smarty 的小修改开始,根据需求扩展您的技能,然后越来越精通。
Smarty 有两个方面:PHP 应用程序编程接口 (API) 和显示引擎。应用程序代码将调用 API 把代码变量与模板占位符关联起来,而显示引擎将解释 Smarty 标记、执行循环、引用占位符和显示最终结果。Smarty 功能包括:
-
用于显示 PHP 的所有基本数据结构的运算符
- 显示简单变量,迭代整个数组或关联数组,以及显示类的成员。
-
占位符的默认值
- 如果 PHP 代码没有将变量与占位符关联,则显示默认值。
-
控制运算符,例如
- 例如,设计人员可以选择用加粗的红色文本显示负账户余额,而用黑色文本显示正余额。您可以在模板中隔离此类显示逻辑(使您可以更轻松地进行开发)。
if
、then
、else
,可以根据输入数据选择动态显示哪些内容
-
循环控制,它将提供用于简化构建列表和表的特殊变量
- 例如,可以测试循环的第一次迭代并创建表头。还可以像循环迭代一样循环执行值轮循 (round-robin) 列表,循环迭代非常适于改变表行的颜色。
-
渲染时用于改变数据的修饰符
-
例如,可以用 Smarty 标记
<strong>{$name|upper}</strong>
大写加粗显示占位符 —— 如$name
。
<strong>
是普通 HTML。大括号 ({}
) 用于划定 Smarty 标记,$name
是占位符,而|upper
是修饰符。还可以编写自己的修饰符以扩展 Smarty 的功能。 -
-
如果必须 包括脚本和原始 PHP 代码,可以用
-
literal
运算符内的所有内容都将被逐字传递给最终页面。php
运算符中放置的代码将像嵌入到<?php ... ?>
转义符内一样执行。 -
- Smarty 模板采用了若干个 Smarty 运算符: {include file='filename'}
-
像是 PHP 自己的
include()
方法一样运行,在适当的位置立即插入和解释filename
的内容。虽然并未显示,但是可以将变量从一个模板传递给另一个模板,这样做鼓励重用。
literal
和 php
运算符来完成
-
{$person->GetProperty('name')}
-
假定
person
与名为GetProperty()
的方法相关。您可以调用对象的方法和引用对象成员,像{$person->quote}
所做的那样。
-
{section name=index loop=$placeholder}
-
在数组内迭代。
loop
属性将给占位符命名,而name
属性将指定一个名称以供数组索引使用。在循环内,将把数组元素作为{$placeholder[index]}
来引用。
-
foreach
-
像
section
一样迭代,但是提供了一个非常优秀的功能来处理一组关联数组,例如数据库查询的行列表。每个关联数组都被 “转换” 到名为item
的索引中。例如,在清单 5 中,person
被命名为item
。每执行一次循环,person
就会被指定来自数组people
的关联数组。在那之后,在整个循环过程中,可以通过关键字引用关联数组中的值,如{$person.signature}
。
-
foreach 中的 name 属性
-
类似于 HTML 标记的
id
属性,它将惟一地识别循环。使用此 ID 来引用反映循环状态的特殊变量集。例如,一个特殊变量是first
,它只在循环的第一次迭代时才被设定。因此,值$smarty.foreach.people.first
将引用与名为people
(people
) 的foreach
循环 (foreach
) 关联的特殊 Smarty 变量 (smarty
)。正如您可能会想到的那样,还有last
值和iteration
值,它们从 1 开始,并随每次迭代增加(如果需要从零开始的计数器,请使用index
而不要使用iteration
)。
-
cycle
-
用于构建表的优秀运算符。如果提供
values
列表,Smarty 将像循环迭代一样在所有值中循环。将循环添加到bgcolor
中将改变每个表行的颜色可以使表更清晰。
-
{foreachelse}
-
如果要迭代的数组为空,则转而显示
{foreachelse}...{/foreachelse}
的内容。