【问题标题】:Best way to create a "template interpreter" in PHP在 PHP 中创建“模板解释器”的最佳方法
【发布时间】:2010-06-28 03:18:09
【问题描述】:

我正在托管一个用 PHP 编写的多区域解决方案,每个客户在一些 HTML 文件中都有自己的模板。现在我希望这些用户能够使用一些动态内容块,但他们不能使用 PHP。我的想法是这样的:

在 HTML 文件中,如果我把这个:

<ul>[menu-list]</ul>

会输出如下内容:

<ul><li><a[...]>Home</a></li><li><a[...]>About</a></li>[...]</ul>

有没有比通过file_get_contents()preg_match_all() 继续解析和缓存文件更好的方法?

我想创建大约 20 个条目,例如 [menu-list],并且为所有这些条目解析每个文件对我来说似乎相当昂贵。

如果有任何建议,我将不胜感激。 =D

【问题讨论】:

  • 我错过了什么吗?为什么这个措辞巧妙、经过深思熟虑的问题遭到反对...尤其是当新用户提出这个问题时

标签: php parsing caching file-get-contents preg-match-all


【解决方案1】:

也许您应该考虑使用模板编译器而不是模板解释器。也就是说,不是每次加载页面时都执行整个替换过程,您只需在修改模板后执行替换即可。在模板编辑期间,成本应该可以忽略不计。要实现此编译,您可以选择在一些面包屑中“编译”以便您可以倒退,或者您可以简单地保存原始模板文件以供以后编辑。

或者,您可以考虑使用 PHP 变量命名约定并通过 eval 运行您的模板,但这会带来许多其他问题(如安全威胁),因此不强烈推荐。

【讨论】:

  • +1。这是一个好主意(尤其是编译部分),但我会采取稍微不同的方法来保留文件以供编辑。每次进行会影响该文件的更改时,我都会重新生成编译文件,但我会保持整个原始文件完好无损。
  • 不错。我会做这样的事情。
【解决方案2】:

为什么不能使用Smarty 和朋友?我不想写你自己建议的东西。

【讨论】:

  • Smarty 似乎是一个很棒的工具,但我无法训练人,甚至无法在&lt;smarty:&gt; 标签中询问知识。
  • [menu-list] 比 smarty 的标签好在哪里?
猜你喜欢
  • 2018-03-21
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多