使用Mustache PHP,加载部分但不解析标签

时间:2015-01-14 14:48:06

标签: php mustache mustache.php

我有一个Mustache模板,其中包含一些部分内容。我想将部分加载到PHP中的字符串中,其中部分内容包含在字符串中。但我不希望解析模板。

例如,如果我有这个Mustache模板,myTemplate.mustache

{{> partials/myPartial }}
{{ my_text }}

这是partials/myPartial.mustache

{{ my_header }}

然后我想加载myTemplate.mustache并且有一个PHP变量包含:

{{ my_header }}
{{ my_text }}

我可以看到如何使用new Mustache_Loader_Filesystem()->load()获取模板的内容,但不包括部分内容。

1 个答案:

答案 0 :(得分:1)

你无法看到这样做的方法,因为这是不可能的。 Mustache本身甚至从未像这样处理合并在一起的模板,因此没有理由会公开API来获取它们。

由于partials的性质,它并不像用该模板的内容替换部分标签那么简单。例如,partials不会从包含它们的模板继承分隔符更改和pragma,因此必须对其进行处理。部分也缩进到包含它们的标记的级别,因此用部分内容替换部分标记也必须这样做。

我认为如果你真的想要它,你可以加载模板和部分,然后使用Mustache Tokenizer在模板源中查找partials标签,然后用相关部分的内容替换它们(递归)。然后你必须弄清楚如何在内联部分的开始和结束时更改分隔符(或完全禁止分隔符更改,如果在处理解析后的模板时遇到异常,则可以通过抛出异常来完成)。并且我想不出一种方法可以在添加pragma之后删除它们,因此您要么必须禁止编译指示,要么确保所有内联部分都与父模板中使用的任何编译指示兼容。

至少可以说,这是一项相当多的工作。