SMARTY не показывает 0

У меня возникла проблема со SMARTY после обновления до последней версии. Когда я использую оператор IF/ELSE, и он должен отображать 0, он ничего не отображает:

шаблон.tpl:

var xxxF = {{if false}}1{{else}}0{{/if}};
var xxxT = {{if true}}1{{else}}0{{/if}};

результат: (представленный источник):

var xxxF = ;
var xxxT = 1;

Имхо, должно быть:

var xxxF = 0;
var xxxT = 1;

Что не так?


person Tom    schedule 09.03.2016    source источник
comment
Smarty обычно использует одинарные фигурные скобки. То же самое происходит, когда вы используете {if false}1{else}0{/if}?   -  person Gerald Schneider    schedule 09.03.2016
comment
да, но в моем коде я должен использовать двойные фигурные скобки ($smarty->setLeftDelimiter('{{');)   -  person Tom    schedule 09.03.2016
comment
Могу я спросить, почему? Я могу представить, что причиной проблемы является то, что заставляет вас это делать, а не умничка.   -  person Gerald Schneider    schedule 09.03.2016
comment
система была построена таким образом, на случай проблем JavaScript с фигурными скобками.   -  person Tom    schedule 09.03.2016
comment
почему smarty должен мешать javascript? в любом случае... Я не могу воспроизвести вашу проблему с текущей версией Smarty (3.1.29), я получаю вывод var xxxF = 0;   -  person Gerald Schneider    schedule 09.03.2016
comment
О, кто-то заново изобрел колесо. Конечно, это квадратное колесо, так как Smarty по дизайну предоставляет не один, а два способа избежать проблем с использованием фигурных скобок в Javascript и CSS: {ldelim}, {rdelim} и {literal}.   -  person axiac    schedule 09.03.2016
comment
Определите скомпилированный файл, сгенерированный Smarty в templates_c, и взгляните на него. Это запутанно, но это PHP; вы можете узнать, что Smarty понял из вашего шаблона и почему его вывод выглядит именно так.   -  person axiac    schedule 09.03.2016
comment
Ну, я не тот, кто может это изменить. Я работаю над системой, которая только что была построена таким образом, и я не думаю, что изменение ее обратно на одинарные фигурные скобки будет самой блестящей идеей. Но в любом случае, разве это не должно работать нормально независимо от того, какие разделители используются?   -  person Tom    schedule 09.03.2016
comment
Оно делает. Я пробовал это как с одинарными, так и с двойными фигурными скобками. Работает в обоих случаях.   -  person Gerald Schneider    schedule 09.03.2016
comment
Вот как это видят УМНЫЕ: var xxxF = <?php if (false) {?>1<?php } else { }?>;   -  person Tom    schedule 09.03.2016


Ответы (1)


Я не уверен, что именно было источником проблемы, но в скомпилированном файле, сгенерированном Smarty в templates_c, я заметил, что версия Smarty была 3.1.28, а не последней (3.1 .29).

После того, как я обновил его до последней версии, проблема исчезла, и теперь он работает нормально.

Спасибо за ваши комментарии, все они привели меня к тому месту, где я смог это исправить.

person Tom    schedule 09.03.2016