此:
{1234|count_characters}
输出:
4
好。但是这个:
{if 12345|count_characters == 4}
it's 4
{/if}
输出it's 4
。上面的if语句应该明显地评估为false。为什么总是评价为真?
count_characters
smarty修饰符只显示字符串或数字中的字符数:
http://www.smarty.net/docsv2/en/language.modifier.count.characters.tpl
答案 0 :(得分:0)
因为{x|y}
语法是echo y(x)
的智能短代码,其中echo
很重要
但是,{if y|x ==4 }
相当于在or
上执行按位|
(x
)而y
(12345|count_characters
为真,因为{ {1}}是正确的,即使12345
将作为常量进行测试,如果常量不存在,那么作为字符串文字,同时抛出通知),将该操作的结果与{{1 (true == 4 with loose-typing),然后如果是true,等等
答案 1 :(得分:0)
Smarty不是一种编程语言;它是一种模板化标记语言。您已采用输出过滤器并尝试将其用作条件中的通用功能。那不行。
你应该在PHP脚本中保留这样的逻辑。
答案 2 :(得分:0)
这里的问题是你如何使用它。
如果在PHP中,则指定此var:
$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