Выражение Smarty {if false_}
не оценивает никаких функций. Это эквивалентно {if 'false_'}
, что в свою очередь совпадает с выражением PHP if ('false_')
. (Кстати, if (false_)
в PHP также означает то же самое, если вы не запустили define('false_', ...)
.)
Под «Манипуляции» правила РНР, строка интерпретируется как логическое значение является true
тех пор, пока это не пустая строка (''
). Таким образом, {if false_}
эквивалентен {if true}
.
A Smarty "template function" предназначен только для того, чтобы быть вызванным самостоятельно и возвращать что-то для вывода на шаблон, например. {false_}
.
Самый простой способ иметь обратный вызов, который вы можете проверить внутри условия {if}
, состоит в том, чтобы определить "modifier", а не «функцию». Хотя модификатор всегда будет дано по крайней мере, один параметр, его можно просто игнорировать, так что вы могли бы иметь следующее:
function smarty_modifier_false_($whatever) {
return false;
}
, а затем в Smarty просто передать любую старую строку, как слева от модификатора:
{if ''|false_} false_ is true!? {else} false_ is false. How reassuring. {/if}
Альтернативные подходы:
- Установите параметры безопасности в шаблоне таким образом, что вы можете написать
{if false_()}
, потому что false_
это PHP функция позволила ди прямо в шаблонах. (См. documentation on {if}
, где он ссылается на the details of Security.)
- Зарегистрировать block function. Это немного сложнее написать, но позволит вам иметь свой собственный обычай, если замена, например.
{if_false_} This text never appears {/if_false_}
.
Я думаю, что на самом деле проще определить простую функцию (т. Е. 'False_' вместо' smarty_modifier_false_', а затем зарегистрировать ее и использовать). – raina77ow
Oh:/Так есть ли способ иметь '{if testSomething}' формат? Или какой самый лучший формат для проверки bool? Потому что '{if '' | userLoggedIn} кажется странным. –
@ raina77ow Я не понимаю вас, или вы меня не понимаете? Регистрация его как функции Smarty - это то, что OP пытался, и он не работает, потому что это не так, как определяется тег '{if}. – IMSoP