我得到了以下内容:
{{#lang}}Dear{{/lang}} {{customer.ship_firstname}},<br />
{{#lang}}Thank you for ordering from{{/lang}} <a href="{{shop.URL}}">{{shop.name}}</a>.
现在我使用以下设置运行渲染:
$m = new Mustache_Engine(
array(
'helpers' => array(
'lang' => function($text) {
return __($text); // i18n translation
}),
'charset' => 'UTF-8'
)
);
$data = array();
echo $m->render($input, $data);
输出:
Dear ,<br />
Thank you for ordering from <a href=""></a>.
我想保留无法呈现的标记。如上所述,当$ data没有customer.ship_firstname
和shop.URL
的数据时,渲染的数据仍然应该包含{{customer.ship_firstname}}.
是否有禁用/启用此胡子设置?
我想要的输出如下:
Dear {{customer.ship_firstname}},<br />
Thank you for ordering from <a href="{{shop.URL}}">{{shop.name}}</a>.
答案 0 :(得分:1)
简短的回答是不,这是不可能的,原因很多。
答案越长,你提出错误的问题;)
它被称为the XY problem。你可能会更好地问“我想要完成X.我尝试了Y而这似乎不起作用。我怎么能完成X?”
所以,我假设您要问“我想在Mustache模板中只渲染一些标签,例如,在服务器上的Mustache.php中,以便我可以稍后再渲染,例如在浏览器中的Mustache.js中。我尝试使用部分数据进行渲染,但它没有保留未渲染的标记。如何部分渲染Mustache模板?“
您最好的选择可能是使用Set Delimiter tags使用两组明确的标记来呈现您的模板。它看起来像这样:
{{=[[ ]]=}}
[[# lang ]]Dear[[/ lang ]] {{ customer.ship_firstname }},<br />
[[# lang ]]Thank you for ordering from[[/ lang ]] <a href="{{ shop.URL }}">{{ shop.name }}</a>.
然后,在第一次传递时,它会替换所有[[ ]]
标记,并留下:
Dear {{ customer.ship_firstname }},<br />
Thank you for ordering from <a href="{{ shop.URL }}">{{ shop.name }}</a>.
请注意,如果您进行双遍渲染,则必须绝对确定您信任第一遍的输出。如果您将用户数据放在那里,那么他们完全有可能使用“小胡子注入”攻击并做一些邪恶的事情。在你的情况下,看起来数据来自翻译字符串,所以你可能没问题,但是这个说明也适用于其他人做同样的事情。