Smarty升级2到3个_tag_stack选项

问题描述

我正在将一些代码从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']; }


解决方法

Smarty 3是一个非常激进的重写,Smarty 2是在PHP出现属性可见性之前的那一天,标签堆栈实际上应该是Smarty类的私有属性,并且在Smarty 2中是唯一的引用它的类是编译器(Smarty_Compiler),它实际上扩展了Smarty类。因此,尽管可以从外部代码访问Smarty 2中的标签栈,但这并不是意料之中的。

在Smarty 3中,编译器不再扩展Smarty类,而是扩展了Smarty_Internal_TemplateCompilerBase,即_tag_stack属性所在的位置。尽管有下划线,但它是公共财产。臭。

Smarty_Internal_Template具有$ compiler属性,因此,如果您尝试访问custom function内的标签栈,那可能是最好的选择。

getTags方法返回模板中使用的所有标签及其参数,而不是像标签栈那样实时更新的东西。