javascript - Smarty 2 模板中的 JavaScript 不再需要 {ldelim} 和 {rdelim}

标签 javascript smarty templating error-logging smarty2

我在 Smarty 2 模板文件中有以下 JavaScript block 。

该代码是逐字记录提供商提供给我的内容,但值得注意的是,我必须添加一些 {ldelim}{rdelim} Smarty 标签替换了 JavaScript {}

我需要输入$log_id,这不会改变,但是有没有办法让我编写这个更干净的代码,而不需要所有这些使代码看起来不太可读的标签?

我知道 {literal} 标签,但打开和关闭该标签可能会降低其可读性。

<script type='text/javascript'>
    window.Muscula = {ldelim} settings:{ldelim}
        logId:"{$log_id}", suppressErrors: false, branding: 'none'
    {rdelim}};
    (function () {ldelim}
        var m = document.createElement('script'); m.type = 'text/javascript'; m.async = true;
        m.src = (window.location.protocol == 'https:' ? 'https:' : 'http:') +
            '//musculahq.appspot.com/Muscula.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(m, s);
        window.Muscula.run=function(c){ldelim}eval(c);window.Muscula.run=function(){ldelim}{rdelim};{rdelim};
        window.Muscula.errors=[];window.onerror=function(){ldelim}window.Muscula.errors.push(arguments);
        return window.Muscula.settings.suppressErrors===undefined;{rdelim}
    {rdelim})();
</script>

最佳答案

在这种情况下,您可以更改 smarty 分隔符

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

<?php

$smarty->left_delimiter = '{{';
$smarty->right_delimiter = '}}';

$smarty->assign('log_id', 'something');

?>

您的模板将变成:

(注意变量 {{$variable}} 的双括号)

<script type='text/javascript'>
    window.Muscula = { settings:{
        logId:"{{$log_id}}", suppressErrors: false, branding: 'none'
    } };
    (function () {
        var m = document.createElement('script'); m.type = 'text/javascript'; m.async = true;
        m.src = (window.location.protocol == 'https:' ? 'https:' : 'http:') +
            '//musculahq.appspot.com/Muscula.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(m, s);
        window.Muscula.run=function(c){eval(c);window.Muscula.run=function(){};};
        window.Muscula.errors=[];window.onerror=function(){window.Muscula.errors.push(arguments);
        return window.Muscula.settings.suppressErrors===undefined;}
    })();
</script>

关于javascript - Smarty 2 模板中的 JavaScript 不再需要 {ldelim} 和 {rdelim},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976762/

相关文章:

Django - Django 模板和标签

javascript - 慢速 Canvas 元素

javascript - 在 div jquery 中滚动到 div 的顶部

javascript - 我应该如何衡量 JS 的单元测试覆盖率?我不能满足于 jscoverage

javascript - 从 JavaScript 文件访问服务功能

php - 如何用smarty生成json?

java - java中的handlebars.js实现是否存在?

javascript - Ruby 和 Javascript 的模板引擎

javascript - 单击事件时使用 jQuery 在 Smarty 输入字段中动态主机名

CSS 未在动态 smarty 模板元素上呈现