0

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

代码与提供商提供给我的内容一字不差,但值得注意的是,我不得不添加许多Smarty 标记来替换 JavaScript{ldelim}和.{rdelim}{}

我需要输入$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>
4

1 回答 1

3

在这种情况下,您可以更改 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>
于 2013-04-12T16:53:09.933 回答