什么是 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 配合工作,从而将应用程序与其表示干净地分离开。