Умные переменные внутри 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 и, следовательно, присвоил его переменной. Надеюсь это поможет.