умные переменные внутри JavaScript - PullRequest
4 голосов
/ 04 августа 2010

Я пытаюсь использовать 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 ]

13 голосов
/ 04 августа 2010

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

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

7 голосов
/ 18 октября 2010
{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. Проблемы, решаемые с помощью новой версии:)

0 голосов
/ 30 ноября 2012

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

...