javascript中的smarty变量

javascript中的smarty变量,javascript,smarty,Javascript,Smarty,我试图在tpl中的javascript中使用smarty变量 {literal} <script language="javascript"> google.load('visualization','1',{'packages': ['geomap']}); google.setOnLoadCallback(drawMap); function drawMap() { var data = new google.visualization.DataTable

我试图在tpl中的javascript中使用smarty变量

{literal}
<script language="javascript">
  google.load('visualization','1',{'packages': ['geomap']});
  google.setOnLoadCallback(drawMap);


  function drawMap() {
    var data = new google.visualization.DataTable();
    data.addRows(4);
    data.addColumn('string', 'Location');
    data.addColumn('number', 'Number of links');

{/literal}{foreach from=$last5 item=link name=links key=index}
    data.setValue({$index},0,'{$link.location|replace:'\'':'\\\''}');
    data.setValue({$index},1,{$link.location_count});
{/foreach}{literal}

    var options = {};
    options['dataMode'] = 'regions';
    options['region'] = 'world';

    var container = document.getElementById('map');
    var geomap = new google.visualization.GeoMap(container);

    geomap.draw(data, options);
  };
</script>
{/literal}
{literal}
load('visualization','1',{'packages':['geomap']});
setOnLoadCallback(drawMap);
函数drawMap(){
var data=new google.visualization.DataTable();
数据。添加行(4);
data.addColumn('string','Location');
data.addColumn('number','number of links');
{/literal}{foreach from=$last5 item=链接名=链接键=索引}
setValue({$index},0,'{$link.location | replace:'\''\''\''}');
setValue({$index},1,{$link.location\u count});
{/foreach}{literal}
var选项={};
选项['dataMode']='regions';
选项['region']='world';
var container=document.getElementById('map');
var geomap=newgoogle.visualization.geomap(容器);
绘制地理地图(数据、选项);
};
{/literal}

您能给我建议一个解决方案吗?请在插入smarty变量之前关闭{literal}标记,然后重新打开它

或者对从Smarty分配值的代码段使用{ldelim}和{rdelim}

{literal}
function doSomething(myNumber){
  var result = myNumber/{/literal}{$myDivider}{literal};
  // rest of code...
}
// more functions...
{/literal}

或(对于Smarty 3.x及以上版本,不需要文字等)

在Smarty 3中,旁边带有空格字符(空格、制表符或换行符)的左大括号不应再干扰Smarty逻辑。使用新版本解决的问题:)

在尝试(karvonen)回答[我没有尝试
{rdelim}
,但是,只尝试了
{literal}
],我的
ajax
请求出现问题,在smarty破解JS后,它停止从服务器加载时获取任何日期。因此,我所做的是将smarty值赋给一个
隐藏字段(我知道这不是最明智的做法),然后从JS请求该值,并将其赋给一个变量。

希望这有帮助

你的问题是什么?什么不起作用?这不起作用,语法正确吗?-1--你的链接过期了-这真的让我无法理解这篇文章!我是否需要为smartyNo的foreach标记执行此操作Smarty标记可以放置在{literal}{/literal}内。当需要在Smarty中放置foreach、变量、if或其他任何内容时,必须在{literal}之外执行。如果存在小JS,最好省略{literal},而使用{ldelim}和{rdelim}来表示JS中所需的文字花括号。我真的很困惑,我正在尝试很多事情,但我无法处理它,你能编辑代码并粘贴它吗?实际上,你的代码应该已经工作了。我唯一真正改变的是在一个地方转义了单引号。也整理了一点,还有别的。使用生成JSON服务器端是一个非常非常好的实践。这样你就不必逃避任何事情,你只需要给一个JS变量赋值一次JSON,然后在纯JS中使用它,使用JS for,完全没有Smarty。我这里也有类似的情况,但有点复杂,看看@my code<代码>{literal}{/literal}
在本例中,它不会返回完整的url,但会检索到值。有什么帮助吗?至少您有“localhots”,而不是“localhost”。此外,“localhost”可能是不可接受的,请参见为我制定的这种方法
{/literal}{$myDivider}{literal}
{literal}
function doSomething(myNumber){
{/literal}
   var result= myNumber/{$myDivider};
{literal}
  // rest of code...
}
// more functions...
{/literal}
function doSomething(myNumber){ldelim}
   var result= myNumber/{$myDivider};
   // rest of code below...
{rdelim}

function doSomeMore(another){ldelim}
   alert('{$myHello}');
   // more code
{rdelim}
function doSomething(myNumber){
   var result = myNumber/{$myDivider};
   // rest of code 
}