4

我将 Smarty 用于服务器端模板,我想将 Handlebars.js 用于客户端模板,但 Smarty 会出错,因为 Handlebars 使用与 Smarty 相同的花括号。我可以在 Smarty 的文字标签中编写 Handlebars 模板,但这次我不能在 Handlebars 模板中使用 Smarty。

例如:我为 cleanurl 编写了一个 smarty 块函数。我不想为javascript编写一个cleanurl函数。所以我想同时使用Smarty和Handlebars.js。

<div class="model-item" id="model-{{id}}">
    <a href="{$mainurl}{cu}?com=model&act=view&id={{id}}{/cu}"> {{name}} </a>
</div>
4

3 回答 3

6

您还可以使用文字标签...比转义每个花括号要好得多。

{literal}
<script id="entry-template" type="text/x-handlebars-template">
  {{any_var}}
</script>
{/literal}
于 2012-08-01T19:14:02.927 回答
1

http://www.smarty.net/docs/en/language.escaping.tpl

文档的这一部分讨论转义。我认为“{ldelim},{rdelim}”可能是您正在寻找的......尽管它使代码的可读性降低了......

于 2012-06-06T12:35:08.047 回答
0

我知道这是一个老问题,但现在这是一个受支持的 smarty 功能。(我在寻找同样的问题时偶然发现了你的问题,所以我想回答它,以防其他人有同样的问题)

如果你添加这个:

$smarty->setLiterals(array('{{{','}}}','{{','}}'));

Smarty 现在将忽略胡须和车把的所有双重和三重分隔线。注意:在启用之前,必须检查他们现有的 smarty 模板是否有任何合法的 smarty 使用 {{ 或 {{{ 并在设置后重新编写他们的代码,这些现在是文字,它们将不再用作 smarty 语句。

https://github.com/smarty-php/smarty/issues/508#issuecomment-437640751

这是版本 3.1.32

于 2018-11-11T03:33:03.927 回答