0

这个:

{1234|count_characters}

输出:

4

好的。但是这个:

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

输出it's 4。上面的 if 语句显然应该评估为 false。为什么它总是评估真实?

smarty 修饰符仅显示字符串或数字中的count_characters字符数:

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

4

3 回答 3

0

这里的问题是你如何使用它。

如果在 PHP 中分配这个变量:

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

并使用此代码(一个额外的 if 以确保它正常工作):

{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

于 2014-11-01T10:35:55.050 回答
0

因为{x|y}语法是一个聪明的短代码echo y(x).... where echois significant

但是,{if y|x ==4 }等效于对and or(为真,因为是真,即使将作为常量进行测试,如果该常量不存在则作为字符串文字,同时抛出一个通知),比较结果该操作针对(真 == 4,松散类型),然后如果为真,等等|xy12345|count_characters12345count_characters4

于 2014-10-31T19:12:02.820 回答
0

Smarty 不是一种编程语言。它是一种模板标记语言。您采用了一个输出过滤器并尝试将其用作条件中的通用函数。那是行不通的。

您应该在 PHP 脚本中保留这样的逻辑。

于 2014-10-31T19:15:05.220 回答