错误条件下的修饰符
modifiers within false conditions
抱歉,之前有人问过这个问题,但我找不到了。
为什么以下失败
Uncaught --> Smarty Compiler: Syntax error in template
"/home/ezms/public_html_subs/dev4/design/backend/templates/index.tpl"
on line 31 "{""|foo }" unknown modifier "foo"
{if false} {""|foo} {/if}
我有条件地包含了某些代码,即
{if $x_enabled} {
function foo() {
return "hello";
}
}
我希望如果 smarty IF 条件的计算结果不为真,则不会执行修饰符。我哪里错了?
您应该在 smarty 插件目录中添加 foo
修饰函数 (https://www.smarty.net/docs/en/plugins.modifiers.tpl)
文件将有一个名称 modifier.foo.php
并包含代码:
function smarty_modifier_foo()
{
return 'hello';
}
然后,您在模板中的代码 {if false} {""|foo} {/if}
将起作用。
Smarty 是一个编译器,使用词法分析器将其代码语法转换为 PHP。然后 Smarty PHP 执行代码。
编译时,会出现无法识别修饰符的错误。如果修饰符被识别,词法分析器会将其转换为真正的函数(基于插件的作用)——例如,foo("")。作为修改器插件,您可以自由地让插件做更多认为必要的工作,即使没有使用对参数的任何操作的结果。
那么……
编译后的 PHP 代码类似于:
if(false){$smarty_user_functions->foo("");}
如果编译成功,Smarty 就会让 PHP 执行该代码,其中 PHP 使用自己的优化算法将人类可读的脚本转换为 token/opcode/bytecode。如果当 PHP 运行此代码时,它将决定在错误条件下做什么。
抱歉,之前有人问过这个问题,但我找不到了。 为什么以下失败
Uncaught --> Smarty Compiler: Syntax error in template "/home/ezms/public_html_subs/dev4/design/backend/templates/index.tpl" on line 31 "{""|foo }" unknown modifier "foo"
{if false} {""|foo} {/if}
我有条件地包含了某些代码,即
{if $x_enabled} {
function foo() {
return "hello";
}
}
我希望如果 smarty IF 条件的计算结果不为真,则不会执行修饰符。我哪里错了?
您应该在 smarty 插件目录中添加 foo
修饰函数 (https://www.smarty.net/docs/en/plugins.modifiers.tpl)
文件将有一个名称 modifier.foo.php
并包含代码:
function smarty_modifier_foo()
{
return 'hello';
}
然后,您在模板中的代码 {if false} {""|foo} {/if}
将起作用。
Smarty 是一个编译器,使用词法分析器将其代码语法转换为 PHP。然后 Smarty PHP 执行代码。
编译时,会出现无法识别修饰符的错误。如果修饰符被识别,词法分析器会将其转换为真正的函数(基于插件的作用)——例如,foo("")。作为修改器插件,您可以自由地让插件做更多认为必要的工作,即使没有使用对参数的任何操作的结果。
那么…… 编译后的 PHP 代码类似于:
if(false){$smarty_user_functions->foo("");}
如果编译成功,Smarty 就会让 PHP 执行该代码,其中 PHP 使用自己的优化算法将人类可读的脚本转换为 token/opcode/bytecode。如果当 PHP 运行此代码时,它将决定在错误条件下做什么。