Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';这是一个很好的PHP模板系统吗?_Php_Templates - Fatal编程技术网

什么';这是一个很好的PHP模板系统吗?

什么';这是一个很好的PHP模板系统吗?,php,templates,Php,Templates,集成PHP模板系统最好/最容易的方法是什么,使用它的好处是什么 我目前根本不使用,我想这可能有助于将内容和演示分离开来 我发现它速度快,易于使用,易于安装(即使在共享主机环境中)。它也不需要使用验证XHTML,这有时很方便(尽管我认为确实需要有效XHTML的模板引擎可能更快) 把你的内容放在一个地方,然后在其他地方编码,这真是太好了 此外,您不仅限于HTML。我使用Smarty生成了XML,甚至SQL除了Mark的经验之外,我还发现Smarty非常适合扩展。我已经基于Smarty构建了一个(公

集成PHP模板系统最好/最容易的方法是什么,使用它的好处是什么

我目前根本不使用,我想这可能有助于将内容和演示分离开来


我发现它速度快,易于使用,易于安装(即使在共享主机环境中)。它也不需要使用验证XHTML,这有时很方便(尽管我认为确实需要有效XHTML的模板引擎可能更快)

把你的内容放在一个地方,然后在其他地方编码,这真是太好了


此外,您不仅限于HTML。我使用Smarty生成了XML,甚至SQL

除了Mark的经验之外,我还发现Smarty非常适合扩展。我已经基于Smarty构建了一个(公司)MVC框架,该框架具有内置视图,既简单又灵活。大量可用的模板助手功能也可以很容易地扩展。

这取决于您的关注点:不同的模板引擎可以更好地用于不同的事情。与一些相比,它相对较重,并且定义了一种比PHP更简单但更受限制的语法。使用与编程语言不太相似的语法有很多好处,例如,如果您将要求图形设计师构建模板


的组件中使用的模板引擎(如或)重量较轻,并使用PHP作为其语法。这在模板中为您提供了更多的功能和灵活性,但要求您严格遵守将业务逻辑排除在模板之外的规定。此外,如果设计师要构建模板,那么PHP语法可能对他来说太复杂了。

PHP本身就是一种非常好的模板语言。出于这个原因,大多数领先的PHP框架不使用单独的模板语言

只需确保您使用(某种重新命名的)MVC,并且不要在视图文件中执行任何数据访问或业务逻辑


我也广泛地使用了Smarty,但发现它与纯PHP相比没有什么优势,只是迫使您保持视图沉默。对于设计者来说,它可能看起来更好一些,但缺点是对于模板实现者来说,灵活性更差。像在三重嵌套数组上循环这样的事情比使用纯PHP变得更加困难。

要跟进Alex所说的,我建议看一看Rasmus Lerdorf的文章


Rasmus Lerdorf是创建PHP的人。

我个人喜欢使用单独的PHP/HTML文件。如果我愿意,它允许我使用其他HTML编辑器(如DreamWeaver),也允许不懂PHP但懂HTML的人编辑模板,而不必学习其他语言。

我使用Smarty多年,但因为特殊的Smarty语法阻碍了我,而一些简单的PHP会更容易。PHP的核心是一种模板语言!我了解到PHPAPI对于所有的表示逻辑都是非常合适的

因此,Savant3及其后代Zend_观点是优越的解决方案。与Smarty一样,您可以轻松编写重复任务的插件。

我敢打赌

它检查文件语法,并确保输出是格式良好的XML,具有正确的转义。这确保了页面对XSS攻击的安全性,而程序员每次都不必担心

Smarty和原始PHP不会自动处理转义,这意味着每个
echo$foo
${foo}
(没有
|escape}
htmlspecialchars()
)都可能是HTML注入漏洞,或者至少会破坏良好的格式

PHPTAL有很好的语法,适合HTML/XML的工作方式,例如,当您希望有条件地将某个内容包装到标记中时,不必重复自己的操作:

<strong tal:omit-tag="condition">
  xxx
</strong>

xxx

而不是:

{if condition}<strong>{/if}
  xxx
{if condition-again!}</strong>{/if}
{if条件}{/if}
xxx
{if条件再次出现!}{/if}

而且语法是XML,不会过于冗长(大多数情况下只添加属性)。HTML和自定义标记结构之间没有难看的混合。

使用模板引擎的最重要原因可能是默认输出转义,它可以减少或消除xss漏洞。

我也是。此外,我使用Smarty的友好视图包装器,使用间接getter/setter将变量分配给Smarty标记。多亏了_u,字符串视图可以很容易地嵌套在视图中。它还可以很好地生成纯文本和HTML格式的电子邮件。这是我没有考虑过的一个很好的例子。Alex,你当然是对的。然而,“保持视图沉默”(对于设计师/非编程人员)通常正是使用模板系统的原因。除了使它表面上更容易,它还防止了“愚蠢”用户的(致命)错误。对每个人来说,我认为tal:omit标签是丑陋的。另外,如果强标记之间有大量数据,那么当您到达结束标记时,它可能并不总是存在。我放弃使用phptal有三个原因:包括带有“metal:”名称空间的部分模板是混乱和丑陋的。对于更复杂的视图逻辑,TAL标记可能会变得冗长和混乱。创建自定义修改器很痛苦。@DGM:您可以忘记它是可选的,但它不会像在其他引擎中忘记它那样产生太大的后果(这会让您有不同步的开始和结束标记,这从来都不是一件好事)@rick:我必须同意metal:-XML不允许在头文件中打开正文,在尾文件中关闭正文的常见模式。但是,自定义修饰符可以使用函数phptal_tales_modifiername()来完成。我尝试使用“phptal_tales_modifiername()”,但我不喜欢全局函数,它只允许一个参数,我不理解“nothrow”和调用“phpta”的必要性