Smarty 表达式{if false_}
不计算任何函数。它等价于{if 'false_'}
,它又与 PHP 表达式相同if ( 'false_' )
。(顺便说一句,if ( false_ )
在 PHP 中也意味着同样的事情,除非你已经运行过define('false_', ...)
。)
根据 PHP 的“类型杂耍”规则,解释为布尔值的字符串true
只要不是空字符串 ( ''
)。所以{if false_}
等价于{if true}
。
Smarty的“模板函数”被设计为只能被自己调用,并返回一些内容以输出到模板,例如{false_}
.
在条件中检查回调的最简单方法{if}
是定义“修饰符”而不是“函数”。尽管总是给修饰符至少一个参数,但可以简单地忽略它,因此您可以具有以下内容:
function smarty_modifier_false_($whatever) {
return false;
}
然后在 Smarty 中,只需将任何旧字符串作为修饰符的左侧传递:
{if ''|false_} false_ is true!? {else} false_ is false. How reassuring. {/if}
替代方法:
- 在模板中设置安全设置,以便您可以编写
{if false_()}
,因为false_
模板中允许直接使用 PHP 函数。(请参阅文档,了解它在{if}
哪里链接到Security 的详细信息。)
- 注册一个块函数。这些写起来有点棘手,但如果替换,您可以拥有自己的自定义,例如
{if_false_} This text never appears {/if_false_}
.