模板语言与直接PHP

Car*_*ers 9 php templates

我打算写一个CMS,但是现在我写下了我的所有想法,并试图在我开始之前完成所有的概念.我被撕毁的一件事是,是否使用模板语言并解析网站的页面,用内容项替换模板标签,或者只是用直接的PHP开发网站,并让CMS生成有用的数据结构.例如:

{navigation: products}
Run Code Online (Sandbox Code Playgroud)

foreach($cms_label['products'] as $product) {

    echo '<li class="product_nav">'.
         '<a href="products/{$product.id}">{$product.name}</a>'.
         "</li>\n";

}
Run Code Online (Sandbox Code Playgroud)

前者更干净,但它涉及发明一种语言,并在显示之前解析每一页.后者不太干净,但我认为如果CMS只提供所有代码的数据,它可以工作得非常好.但是,这会被视为混合逻辑与演示吗?我考虑过的另一种替代方法是使用与模板标签类似的PHP函数:

<?php navigation('products'); ?>
Run Code Online (Sandbox Code Playgroud)

你的想法是什么?

请记住,我不需要做任何比在某个地方包含页面或写出无序列表更复杂的事情; 其余的应由CSS处理.

Bil*_*win 13

PHP的模板语言是一种称为" 内部平台效应 " 的反模式示例.Smarty是PHP模板框架的一个例子,但即使是Smarty一书的作者Hasin Hayder也说Smarty已经死了,不再需要使用它了.

开发模板语言有充分的理由,例如,如果你有非编码器设计师或使用你的CMS的内容编辑器,你不想用PHP的复杂性来压倒他们(或允许他们编写可能的代码打破你的网站).

但是您没有将其描述为目标,所以我假设使用PHP作为您的页面模板语言在这种情况下是最好的.这样做的工作量会减少,因为您不必开发自己的新语言,并且可以为需要特定类型的动态内容的不常见情况提供更大的灵活性.

不要编写PHP函数来封装HTML输出块.相反,include()用来拉入HTML的片段.这种技术有时被称为"部分".

您还可以使用诸如Symfony,Kohana,Solar,CodeIgniter或Zend Framework之类的MVC框架来帮助您保持将PHP模板代码与其他应用程序代码分离的纪律.


tim*_*dev 7

我很长一段时间都是非常高兴的Smarty用户,我不再相信专门的模板语言了.

模板语言不会阻止您在演示文稿代码中添加不适当的逻辑,它只会强迫您在模板语言中编写错误的代码.

在模板中使用php创建自己的小模板系统是相当简单的.然后创建各种帮助程序以保持模板代码清洁(如"navigation()"函数).

我认为Zend_View采用的方法非常好.Symfony的视图层也相当整洁,但可能有点令人生畏.您不必使用框架从中获取内容.只需看看示例中的一些模板代码,看看是什么激发了你的灵感.

底线:忘记模板的特殊语言 - 只需对视图代码应用良好的设计意义,将复杂性从视图脚本中分解出来,并转化为可重用的帮助程序.


elv*_*o79 7

重新发明轮子大多数时候都是一个坏主意.

PHP已经是一种模板语言.您不需要实现自己的.

至于Smarty,它是php最完整的模板系统,它仍然是一个坏主意.

关于这个主题的几篇文章:

如果你想看看模板做得更好看看:

  • phpSavant它使用PHP代码,仍然促进关注点的分离.

最终目标当然是通过促进业务逻辑和表示的分离来更容易地维护代码