【问题标题】:HTML Template Language for PHPPHP 的 HTML 模板语言
【发布时间】:2012-07-25 00:25:09
【问题描述】:

我正在制作带有简单模板集成的 php 内容管理系统,但我找不到任何好的模板语言。目前我正在使用 xml 模板并使用 php DOM 解析它们。模板如下所示:

<div class="one_fourth">
    <h4 class="section-header"><span><CMS_STRING type="string" name="title" title="Title" /></span></h4>
    <p><CMS_STRING type="string" name="body" title="Body text" tooltip="" /></p>
    <p><CMS_STRING type="link" name="link" title="Link" /></p>
</div>

在 php 中,我使用 DOM getElementsByTagName 解析所有 CMS_STRING 标签,然后从数据库中为访问者提取值或为管理员生成可编辑的输入。

xml 的一个问题是我不能在属性中使用标签,例如:

<a href="<CMS_STRING name="url" />"></a>

另一个问题是 php DOM 引用转义。它看起来丑陋且难以阅读。假设我想将 JSON 放入本地化标题的属性中:

<CMS_STRING type="string" name="title" title="{&quot;enUS&quot;:&quot;Title&quot;,&quot;enGB&quot;:&quot;Title&quot;}" />

那么我可以在这里使用什么其他模板语言呢?我还需要它来支持 xml(例如获取 CMS_STRING 内部 html)。我发现的所有模板语言都是用缓存引擎和我不需要的所有其他东西预先制作的。我只需要一个带有解析器的简单语言,我会自己处理其他事情。

谢谢。

【问题讨论】:

标签: php html templates


【解决方案1】:

使用PHP Templating Language。你的生活会更好、更快乐、更简单、更快,你周围的人会感谢你的后代,世界各地的小狗和小猫会更少死去,全球变暖甚至可能会放缓一点。

【讨论】:

  • 没有 PHP 不是模板语言!!安全呢? htmlspecialchars($var, ENT_QUOTES, 'utf-8') 在每个 echo 上?一个函数 e() 来逃避? PHP 应该是一种模板语言,但由于它的漏洞,它不是。假设你忘了逃跑,那太糟糕了,你的网站可能会被毁掉。
  • @petter 这就是为什么您在控制器中处理内容,然后按照 MVC 模型将其交给模板的原因。这是组织自己的问题;依靠模板语言为你做这件事只是一个很好的开始。
【解决方案2】:

说出一些你看过但不能使用的名字,所以我们不会一直建议重复。你看过Smarty吗?它很棒,听起来可以满足您的需求。

是的,Smarty 有缓存,但您不必启用它。您将获得的唯一结果文件是模板的编译版本,但这只是为了提高效率,您可以禁用模板缓存(以换取性能)。

【讨论】:

  • smarty 的问题是它需要 php 变量并将其放入模板中,而我在加载模板时没有任何变量。我所做的是找到所有 cms 字符串并根据处理它的类型加载插件。我还应该注意到模板是嵌套的,同一个模板可能存在多次,但数据不同。
  • Smarty 中不必有任何变量。它可以是纯 HTML 或带有占位符的 HTML。您还可以使用不同的数据多次渲染相同的模板。我看不出它为什么不能做你想做的事。
  • 我同意@drew010。我用 smarty,虽然一开始不喜欢,但现在绝对喜欢。
  • 我猜我们并不了解对方。我需要的是模板解析器而不是模板引擎。如果我只加载数据库数据,Smarty 会很好,但我所做的是根据模板生成动态 admin cp。为此,我需要获取所有模板变量(我的代码中的 cms_string),我还没有在 smarty 中找到这个功能。
  • 哇。嗯,我猜那是原创的。
【解决方案3】:

流行的模板引擎:

  • Smarty(过时了)

  • Latte(主要由 Nette 社区使用)

  • Twig(主要由 Symfony 社区使用)

  • Mustache(这个模板引擎的官方实现有超过两打编程/脚本语言)

我倾向于Mustache,主要是因为它有an official JS version、an official Ruby version、an official Java version 等。它允许您使用相同的模板前端和后端,这对于首先在后台渲染并在更新时在前台重新渲染的小部件非常有用。

【讨论】:

    【解决方案4】:

    有很多可用的模板系统Twig、Smarty、Moustache,当然还有 PHP 本身。

    我喜欢一个实际的模板系统而不是使用普通的旧 PHP 的一点是,如果您不熟悉 MVC 设计模式,它几乎会迫使您执行其中的 VC 部分,并告诉您重要性它...我说的差不多是因为您仍然可以在它们中执行业务逻辑,但是它们通常会使它变得困难,并且使您气馁。

    我相信它们都内置了缓存,因此在执行方面应该和普通的 php 脚本一样快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-23
      • 2013-07-12
      • 2010-11-30
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      相关资源
      最近更新 更多