Как получить все виджеты на определенной позиции?
Как получить все виджеты на определенной позиции?
Подскажите, пожалуйста, можно ли как-то просто получить в коде все виджеты на определенной позиции?
В классе cmsTemplate есть открытый метод public function hasWidgetsOn($position) и защищенная переменная protected $widgets = array(), а мне бы надо что-то типа 'getWidgetsOn($position)'...
Или необходимо писать все самому, обращаясь к модели widgets?
$template = cmsTemplate::getInstance(); $reflection = new ReflectionClass($template); $property = $reflection->getProperty('widgets'); $property->setAccessible(true); $prop = $property->getValue($template);
Пока решил доступ к свойству widgets через ReflectionClass. Может, кому пригодится.
Но буду признателен за более элегантное решение.
$template = cmsTemplate::getInstance(); $reflection = new ReflectionClass($template); $property = $reflection->getProperty('widgets'); $property->setAccessible(true); $prop = $property->getValue($template);
а что мешает получить через ->widgets($position) ???
Вам нужны все виджеты из нужной позиции или только на данной странице все виджеты нужной позиции?
На данной странице все виджеты нужной позиции
Пока решил доступ к свойству widgets через ReflectionClass. Может, кому пригодится.
Но буду признателен за более элегантное решение.
$template = cmsTemplate::getInstance(); $reflection = new ReflectionClass($template); $property = $reflection->getProperty('widgets'); $property->setAccessible(true); $prop = $property->getValue($template);
а что мешает получить через ->widgets($position) ???
widgets($position выводит виджеты. Мне же необходимо получить объекты (или массивы) для анализа и допобработки
Пока решил доступ к свойству widgets через ReflectionClass. Может, кому пригодится.
Но буду признателен за более элегантное решение.
$template = cmsTemplate::getInstance(); $reflection = new ReflectionClass($template); $property = $reflection->getProperty('widgets'); $property->setAccessible(true); $prop = $property->getValue($template);
а что мешает получить через ->widgets($position) ???
widgets($position выводит виджеты. Мне же необходимо получить объекты (или массивы) для анализа и допобработки
пример того, что необходимо получить на выходе. какой именно массив и обьект, что там должно быть и т.д.
более элегантного решения не видно.Но буду признателен за более элегантное решение.
пример того, что необходимо получить на выходе. какой именно массив и обьект, что там должно быть и т.д.
Я пишу сервисный класс для своей темы (шаблона), в котором реализуется некоторая логика в зависимости от того, какие виджеты выводятся на текущей странице в разных позициях. Методы этого класса вызываются в main.tpl.php. Идеально для меня получить массив экземпляров классов cmsWidgets. Но массив, как он представлен в свойстве widgets тоже сойдет. Просто это для меня дополнительные накладные расходы, поскольку мне необходимо получить опции каждого виджета и по идентификатору биндинга приходится их тащить из базы через вызовы метода модели getWidgetBinding
более элегантного решения не видно.
Я честно говоря тоже так подумал после анализа кода. При случае сделаю загрузку из базы по аналогии с методом runWidgets
class cmsTemplate {
public function GetMyWidgets($position) { if (!$this->hasWidgetsOn($position)){ return false; } else { return $this->widgets[$position]; } }
запрос делать
print_r простоя для наглядности вывода.
мда… так. заходишь в файл system/core/template.php и сразу после
Это несколько противоречит моему видению мира. Я никогда не правлю код базовой системы (по очевидным на мой взгляд причинам). Если мне необходимо дополнить функционал, я делаю свой класс в соответствии с предложенной концепцией расширения базовой системы.
делаете в самом классе
class cmsTemplate {
include_once('my_template.php');