Умные переменные внутри JavaScript

Я пытаюсь использовать smarty переменные внутри JavaScript внутри TPL

{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}

Можете ли вы предложить мне решение, пожалуйста

3 ответа

Решение

Просто закройте тег {literal} прямо перед вставкой переменной smarty и снова откройте ее снова.

Или используйте {ldelim} и {rdelim} для фрагментов кода, которым вы назначаете значения из Smarty.

{literal}
function doSomething(myNumber){
  var result = myNumber/{/literal}{$myDivider}{literal};
  // rest of code...
}
// more functions...
{/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}

ИЛИ (с Smarty 3.x и выше, без литералов и т. Д.)

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

В Smarty 3 левая фигурная скобка с пробелом (пробел, символ табуляции или новая строка) рядом с ним больше не должна мешать логике Smarty. Проблемы решены с помощью новой версии:)

После попытки (карвонен) ответов [я не пробовал {rdelim} хотя, только попробовал {literal}] У меня проблема с моим ajax запросы, он перестал получать любую дату с сервера при загрузке после умного взлома в JS. Итак, что я сделал, я назначил умное значение hidden field (Я знаю, что это не самая разумная вещь), а затем запросил это значение у JS и, следовательно, присвоил его переменной. Надеюсь это поможет.

Другие вопросы по тегам