这是:
{1234|count_characters}产出:
4好的。但这一点:
{if 12345|count_characters == 4}
it's 4
{/if}输出it's 4。上面的if语句显然应该被计算为false。为什么它总是评价真实?
count_characters智能修饰符只显示字符串或数字中的字符数:
http://www.smarty.net/docsv2/en/language.modifier.count.characters.tpl
发布于 2014-10-31 19:12:02
因为{x|y}语法是echo y(x)的一个聪明的短代码.其中echo是重要的
然而,{if y|x ==4 }等同于在x和y上执行按位操作(12345|count_characters为true,因为12345是真的,即使count_characters将被测试为常量,如果该常量不存在,则以字符串文字形式进行测试,同时抛出一个通知),将该操作的结果与4 (带有松散类型的真== 4)进行比较,然后如果为真,等等。
发布于 2014-10-31 19:15:05
Smarty不是一种编程语言,而是一种模板标记语言。您已经采取了输出过滤器,并尝试使用它作为一个通用的功能,在一个条件。那是行不通的。
您应该在PHP脚本中保留这样的逻辑。
发布于 2014-11-01 10:35:55
这里的问题是你如何使用它。
如果在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中指定变量(如我在第二段代码中所示),或者在字符串上而不是在int上使用count_characters修饰符:
{if '12345'|count_characters == 4}
it's 4
{elseif '12345'|count_characters == 5}
it's 5
{/if}此代码将按预期工作-您将得到it's 5
https://stackoverflow.com/questions/26681702
复制相似问题