我想尝试使用Smarty来完成我的最新项目,因为我遇到的一些工作职位要求有相关的使用经验。我还没有深入阅读文档,只是获取了一个可以用于相当简单网站上的工作知识。目前为止,这是我的印象-
好处
我曾经在许多网站上工作过,包括当前的项目,它们都有一个相当相似的结构(模板),从页面到页面都是如此。以往,我通常会在文件结构的某个位置保留一个更新的空白模板,并根据具体情况填充它的附加HTML或PHP代码。 Smarty 的一个好处是您可以将这个一般性的模板存储在 Smarty 模板目录中,并使用表现页面模板中的 {extends} 函数进行填充。例如,以下是已保存的模板(缺少文档类型,SO 给我头疼)-
`
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Description" content="{block name=meta_description}{/block}" />
<title>My Smarty Site - {block name=pageTitle}{/block}</title>
{block name=additionalHeaders}{/block}
</head>
<body>
<div id="headerDIV">
<div id="nav-box">
</div>
</div>
<div id="mainContainer">
<div id="generalContent">
<div id="pageTitle">
{block name=pageTitle}{/block}
</div>
{block name=pageText1}{/block}
<div id="page-bottom">
{block name=pageText2}{/block}
</div>
</div>
</div>
</body>
然后像这样填充:
{extends file="myTemplate.tpl"}
{block name=packageTitle}Simple Template{/block}
{block name=meta_description}This is a simple Smarty Template test{/block}
{block name=additionalHeaders}
<link rel="stylesheet" type="text/css" href="/css/smarty_test.css"/>
{/block}
{block name=pageText1}
<p>Hello, {$name}! This is a Smarty Test.</p>
{/block}
{block name=pageText2}
<p>This is some more text....</p>
{/block}
因此,与其为每个相似的页面重复复制我的模板,我使用Smarty扩展它,并使用该特定页面的内容。另一个优点是当我需要更改模板的某些方面时,我只需更改一个页面而不是多个页面(是的,类似于使用许多PHP包含文件)。
缺点
虽然我知道Smarty有很多内置函数并且可以做一些很酷的事情,但要真正充分利用它,您必须学习其语法。如果您已经了解PHP,则需要学习全新的东西才能实现相同的结果。逻辑和设计的分离非常好,直到您需要创建具有许多功能的非常动态的页面-然后您会发现自己使用Smarty语法向模板添加许多条件语句、循环等,您会意识到您可能还不如直接使用PHP。
我确实计划学习更多关于Smarty的知识,因为它在我遇到的许多应用程序中都被使用,并且已被列为工作要求,但我不认为将来会在自己的项目中经常使用它。