Почему это Smarty, если утверждение всегда оценивается как истинное?

Это:

{1234|count_characters}

Выходы:

4

Хорошо. Но это:

{if 12345|count_characters == 4}
it's 4
{/if}

выходы it's 4, Вышеприведенное утверждение if должно быть очевидно ложным. Почему это всегда оценка истины?

count_characters Модификатор smarty просто показывает количество символов в строке или числе:

http://www.smarty.net/docsv2/en/language.modifier.count.characters.tpl

0

Решение

Поскольку {x|y} синтаксис умный шорткод для echo y(x)…. где echo значительный

Тем не мение, {if y|x ==4 } является эквивалентом побитового выполнения or (|) на x а также y (12345|count_characters это правда, потому что 12345 это правда, хотя count_characters будет проверяться как константа, и если константа не существует, то как строковый литерал, при выдаче уведомления), сравнивая результат этой операции с 4 (true == 4 с произвольной типизацией), а затем, если true, и т. д.

0

Другие решения

Smarty не является языком программирования; это шаблонный язык разметки. Вы взяли выходной фильтр и попытались использовать его как функцию общего назначения в условии. Это не сработает.

Вы должны сохранить такую ​​логику в PHP-скрипте.

0

Проблема здесь в том, как вы используете это.

Если в PHP вы назначаете эту переменную:

 $smarty->assign('var',12345);

И используйте этот код (один дополнительный, если нужно убедиться, что он работает как надо):

{if $var|count_characters == 4}
it's 4
{elseif $var|count_characters == 5}
it's 5
{/if}

вы получите в качестве вывода it's 5 — так, как это должно быть.

Если вы ничего не назначаете в PHP, но назначаете это в Smarty, как показано в следующем коде:

{assign var="var" value="12345"}

{if $var|count_characters == 4}
it's 4
{elseif $var|count_characters == 5}
it's 5
{/if}

ты получишь it's 5 — так, как это должно быть.

Как упоминал @MarkBaker, когда вы использовали 12345|count_characters код вычисляется с помощью побитового оператора, функция count_characters на самом деле это не функция — она ​​никогда не запускается, вы можете написать здесь что угодно, например:

{if 12345|count_charact87172368716832ers == 4}
it's 4
{/if}

и вы получите it's 4 даже если явно нет count_charact87172368716832ers модификатор.

Чтобы заставить его работать так, как вам нужно, вы должны либо назначить переменную в PHP (как я показал в первом коде), либо назначить переменную в Smarty (как я показал во втором коде), либо использовать count_characters модификатор на строку, а не на int:

{if '12345'|count_characters == 4}
it's 4
{elseif '12345'|count_characters == 5}
it's 5
{/if}

этот код будет работать как положено — вы получите it's 5

0
По вопросам рекламы [email protected]