Как получить все виджеты на определенной позиции? 2.X

Как получить все виджеты на определенной позиции?

 
Посетитель
small user social cms
Сообщений: 21
Уважаемые коллеги, добрый день!
Подскажите, пожалуйста, можно ли как-то просто получить в коде все виджеты на определенной позиции?
В классе cmsTemplate есть открытый метод public function hasWidgetsOn($position) и защищенная переменная protected $widgets = array(), а мне бы надо что-то типа 'getWidgetsOn($position)'...
Или необходимо писать все самому, обращаясь к модели widgets?
Разработка ПО. Разработка информационных систем. Разработка сайтов. Full stack developer.
Посетитель
small user social cms
Сообщений: 21
Пока решил доступ к свойству widgets через ReflectionClass. Может, кому пригодится.
Код PHP:
  1. $template = cmsTemplate::getInstance();
  2. $reflection = new ReflectionClass($template);
  3. $property = $reflection->getProperty('widgets');
  4. $property->setAccessible(true);
  5. $prop = $property->getValue($template);
Но буду признателен за более элегантное решение.
Редактировалось: 1 раз (Последний: 15 июля 2019 в 20:18)
Разработка ПО. Разработка информационных систем. Разработка сайтов. Full stack developer.
Реклама
cms
Посетитель
small user social cms
Сообщений: 91
@lelik1973:

Пока решил доступ к свойству widgets через ReflectionClass. Может, кому пригодится.
Код PHP:
  1. $template = cmsTemplate::getInstance();
  2. $reflection = new ReflectionClass($template);
  3. $property = $reflection->getProperty('widgets');
  4. $property->setAccessible(true);
  5. $prop = $property->getValue($template);
Но буду признателен за более элегантное решение.

а что мешает получить через ->widgets($position) ???
Разработка проектов любой сложности. Невозможное возможно!
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3907
Вам нужны все виджеты из нужной позиции или только на данной странице все виджеты нужной позиции?
Посетитель
small user social cms
Сообщений: 21
Loadырь:

Вам нужны все виджеты из нужной позиции или только на данной странице все виджеты нужной позиции?

На данной странице все виджеты нужной позиции
Разработка ПО. Разработка информационных систем. Разработка сайтов. Full stack developer.
Посетитель
small user social cms
Сообщений: 91
Мда.... вроде написал
Разработка проектов любой сложности. Невозможное возможно!
Посетитель
small user social cms
Сообщений: 21
mr.KEVASC:

@lelik1973:

Пока решил доступ к свойству widgets через ReflectionClass. Может, кому пригодится.
Код PHP:
  1. $template = cmsTemplate::getInstance();
  2. $reflection = new ReflectionClass($template);
  3. $property = $reflection->getProperty('widgets');
  4. $property->setAccessible(true);
  5. $prop = $property->getValue($template);
Но буду признателен за более элегантное решение.

а что мешает получить через ->widgets($position) ???

widgets($position выводит виджеты. Мне же необходимо получить объекты (или массивы) для анализа и допобработки
Разработка ПО. Разработка информационных систем. Разработка сайтов. Full stack developer.
Посетитель
small user social cms
Сообщений: 91
@lelik1973:

mr.KEVASC:

@lelik1973:

Пока решил доступ к свойству widgets через ReflectionClass. Может, кому пригодится.
Код PHP:
  1. $template = cmsTemplate::getInstance();
  2. $reflection = new ReflectionClass($template);
  3. $property = $reflection->getProperty('widgets');
  4. $property->setAccessible(true);
  5. $prop = $property->getValue($template);
Но буду признателен за более элегантное решение.

а что мешает получить через ->widgets($position) ???

widgets($position выводит виджеты. Мне же необходимо получить объекты (или массивы) для анализа и допобработки

пример того, что необходимо получить на выходе. какой именно массив и обьект, что там должно быть и т.д.
Разработка проектов любой сложности. Невозможное возможно!
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3907
@lelik1973:
Но буду признателен за более элегантное решение.
более элегантного решения не видно.
Посетитель
small user social cms
Сообщений: 21
mr.KEVASC:

пример того, что необходимо получить на выходе. какой именно массив и обьект, что там должно быть и т.д.

Я пишу сервисный класс для своей темы (шаблона), в котором реализуется некоторая логика в зависимости от того, какие виджеты выводятся на текущей странице в разных позициях. Методы этого класса вызываются в main.tpl.php. Идеально для меня получить массив экземпляров классов cmsWidgets. Но массив, как он представлен в свойстве widgets тоже сойдет. Просто это для меня дополнительные накладные расходы, поскольку мне необходимо получить опции каждого виджета и по идентификатору биндинга приходится их тащить из базы через вызовы метода модели getWidgetBinding
Разработка ПО. Разработка информационных систем. Разработка сайтов. Full stack developer.
Посетитель
small user social cms
Сообщений: 21
Loadырь:

более элегантного решения не видно.

Я честно говоря тоже так подумал после анализа кода. При случае сделаю загрузку из базы по аналогии с методом runWidgets
Разработка ПО. Разработка информационных систем. Разработка сайтов. Full stack developer.
Посетитель
small user social cms
Сообщений: 91
мда... так. заходишь в файл system/core/template.php и сразу после

Код PHP:
  1. class cmsTemplate {
вставляешь это
Код PHP:
  1. public function GetMyWidgets($position) {
  2. if (!$this->hasWidgetsOn($position)){ return false; } else { return $this->widgets[$position]; }
  3. }
главное чтобы в классе был.

запрос делать

Код PHP:
  1. $ret = $this->GetMyWidgets('right-top');
  2. print_r($ret); die();
print_r простоя для наглядности вывода.
Разработка проектов любой сложности. Невозможное возможно!
Посетитель
small user social cms
Сообщений: 91
вроде ничего сложного
Разработка проектов любой сложности. Невозможное возможно!
Посетитель
small user social cms
Сообщений: 21
mr.KEVASC:

мда... так. заходишь в файл system/core/template.php и сразу после

Это несколько противоречит моему видению мира. Я никогда не правлю код базовой системы (по очевидным на мой взгляд причинам). Если мне необходимо дополнить функционал, я делаю свой класс в соответствии с предложенной концепцией расширения базовой системы.
Разработка ПО. Разработка информационных систем. Разработка сайтов. Full stack developer.
Посетитель
small user social cms
Сообщений: 91
Ну тут как бы правки нет, а если уж бояться за обновления то тогда проще так:
делаете в самом классе
Код PHP:
  1. class cmsTemplate {
можно в конце класса
Код PHP:
  1. include_once('my_template.php');
а в самом my_template.php пишите свои функции. вот и всё. зачем городить кучу ненужного кода который в конечном итоге будет лишним, так как на разные операции тратится время для чтения, генерация и т.д... Для меня важна эффективность кода. Я на эти моменты не заморачиваюсь, так как потом интеграцию в любой момент можно сделать с новой версией. А городить новые классы и т.д. реально нафиг надо.
Редактировалось: 1 раз (Последний: 15 июля 2019 в 21:32)
Разработка проектов любой сложности. Невозможное возможно!
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: