Обновление Smarty от 2 до 3 параметров _tag_stack

#php #smarty #smarty3 #smarty2

#php #smarty #smarty3 #smarty2

Вопрос:

Я обновляю некоторый код с smarty 2 до 3. В объекте smarty есть значение с именем _tag_stack, которое, похоже, возвращает массив значений тегов. Какова замена 1 к 1 для этого в Smarty 3? Я смотрю на getTags(), но я не уверен, что он возвращает те же значения.

Код, на который я смотрю, это:


if($section_name == '' amp;amp; $smarty->_tag_stack[0][0] == 'bp_section'){ $section_name = $smarty->_tag_stack[0][1]['name']; }


Ответ №1:

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, так что, вероятно, это ваш лучший выбор, если вы пытаетесь получить доступ к стеку тегов внутри пользовательской функции.

Метод getTags возвращает все теги и их аргументы, используемые в шаблоне, это не то, что обновляется в режиме реального времени, как стек тегов.