我正在将一些代码从smarty 2升级到3。smarty对象中有一个名为_tag_stack的值,它似乎返回一个标记值数组。在Smarty 3中,1到1的替代品是什么?我正在查看getTags(),但不确定它是否返回相同的值。
我看的代码是:
if($section_name == '' && $smarty->_tag_stack[0][0] == 'bp_section'){ $section_name = $smarty->_tag_stack[0][1]['name']; }
发布于 2020-09-24 14:06:00
Smarty 3是一个非常激进的重写,Smarty 2是在PHP中属性可见性( property visibility )之前的一段时间,标记堆栈实际上应该是Smarty类的私有属性,而在Smarty 2中,唯一引用它的类是编译器(Smarty_Compiler),它实际上扩展了Smarty类。因此,虽然可以通过外部代码访问Smarty 2中的标记堆栈,但这并不是有意的。
在Smarty 3中,编译器不再扩展Smarty类,它扩展了Smarty_Internal_TemplateCompilerBase,这是_tag_stack属性存在的地方。这是一个公共财产,尽管下划线。臭气熏天。
Smarty_Internal_Template有一个$compiler属性,所以如果您试图访问自定义函数中的标记堆栈,这可能是最好的选择。
getTags方法返回模板中使用的所有标记及其参数,而不是像标记堆栈那样实时更新的东西。
https://stackoverflow.com/questions/64031678
复制相似问题