我在 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/