什么是 Smarty?
为什么使用它?
使用案例和工作流
语法比较
模板继承
最佳实践
速成课程
我们的留言薄有两个模板,一个用于查看,一个用于添加新条目。
{* Smarty *}
<table border="0" width="300">
<tr>
<th colspan="2" bgcolor="#d1d1d1">
Guestbook Entries (<a href="{$SCRIPT_NAME}?action=add">add</a>)</th>
</tr>
{foreach from=$data item="entry"}
<tr bgcolor="{cycle values="#dedede,#eeeeee" advance=false}">
<td>{$entry.Name|escape}</td>
<td align="right">
{$entry.EntryDate|date_format:"%e %b, %Y %H:%M:%S"}</td>
</tr>
<tr>
<td colspan="2" bgcolor="{cycle values="#dedede,#eeeeee"}">
{$entry.Comment|escape}</td>
</tr>
{foreachelse}
<tr>
<td colspan="2">No records</td>
</tr>
{/foreach}
</table>
guestbook.tpl 是用于查看留言薄的模板。它在一个 foreach 循环中循环处理留言薄数据(已从 displayBook() 分配),并显示每个条目的姓名、日期和评论。日期使用 date_format 修改器进行格式化。姓名和评论使用 escape 修改器进行 HTML 转义,以避免任何 HTML 标签冲突或脚本攻击。{cycle} 函数用于在每两行表格中循环背景颜色。
{* Smarty *}
<form action="{$SCRIPT_NAME}?action=submit" method="post">
<table border="1">
{if $error ne ""}
<tr>
<td bgcolor="yellow" colspan="2">
{if $error eq "name_empty"}You must supply a name.
{elseif $error eq "comment_empty"} You must supply a comment.
{/if}
</td>
</tr>
{/if}
<tr>
<td>Name:</td>
<td>
<input type="text" name="Name"
value="{$post.Name|escape}" size="40">
</td>
</tr>
<tr>
<td valign="top">Comment:</td>
<td>
<textarea name="Comment" cols="40" rows="10">{$post.Comment|escape}</textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Submit">
</td>
</tr>
</table>
</form>
guestbook_form.tpl 是用于向留言薄添加条目的模板。如果由于验证错误而重新显示表单,则重新填充表单值并显示相应的错误消息。表单值经过 HTML 转义,因此没有 HTML 标签或引号冲突(非常重要!)
使用此示例应用程序,我们完成了 Smarty 驱动的应用程序的几个关键方面。
希望这能够让您了解如何设置应用程序以使其与 Smarty 配合工作,从而将应用程序与其表示干净地分离开。