Новости Joomla

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

0 Пользователей и 1 Гость просматривают эту тему.
  • 3 Ответов
  • 3523 Просмотров
*

lgmax

  • Захожу иногда
  • 299
  • 1 / 1
Зависимые списки в форме
« : 21.07.2017, 14:30:52 »
Всем привет.

Начал знакомство с компонентом BreezingForms, возник вопрос, как можно реализовать зависимые списки.

Имеется ввиду, что при выборе в первом списке какого-то пункта показывался ниже список с другими параметрами.  !
« Последнее редактирование: 22.07.2017, 01:33:23 от lgmax »
*

lgmax

  • Захожу иногда
  • 299
  • 1 / 1
Re: Зависимые списки в форме
« Ответ #1 : 21.07.2017, 22:14:00 »
Нашел решение на сайте разработчика.

Кому интересно, смотрите тут https://crosstec.org/en/support/online-documentation/breezingforms/15-video-tutorials/198-quickmode-turn-fields-or-sections-on-off.html
*

lgmax

  • Захожу иногда
  • 299
  • 1 / 1
Re: Зависимые списки в форме
« Ответ #2 : 22.07.2017, 01:31:37 »
Пришлось возобновить тему.

Вообщем, посмотрев видео и почитав раздел https://crosstec.org/en/support/online-documentation/breezingforms/12-examples-scripts/186-turn-fields-and-sections-on-or-off-conditionally.html стало ясно, что если хочешь сделать зависимые списки нужно использовать правила.

turn on element mytextfield if switcher is on
turn off element mytextfield if switcher is off

Смысл таков:

Включить "Список 2" если в "Списке 1" выбран пункт "Пункт 1".
Выключить "Список 2" если в "Списке 1" выбран пункт "Пункт 2".

Можно написать так:

Включить "Список 2" если в "Списке 1" выбран пункт "Пункт 1".
Включить "Список 3" если в "Списке 1" выбран пункт "Пункт 2".
Включить "Список 4" если в "Списке 1" выбран пункт "Пункт 3".

Все это здорово, но получается что новые списки открываются, а старые при этом не закрываются.

В итого получается 10 открытых списков.

Чтобы этого избежать, я так понял можно прописать условие:

turn off element mytextfield if switcher isnot on

Выключить "Список 2" если в "Списке 1" не выбран пункт "Пункт 1".

У меня не получилось написать такое условие. Пришлось писать извращения, чтобы выключать другие списки.

Хотя автор говорит, что так можно:

Цитировать
turn [on|off] [element|section] *target element or section name* if *source element name* is/isnot *value or command*

Кто что думает по этому поводу?  ^-^
*

lgmax

  • Захожу иногда
  • 299
  • 1 / 1
Re: Зависимые списки в форме
« Ответ #3 : 22.07.2017, 13:22:57 »
Нашел еще информацию по этой теме: https://crosstec.org/en/support/online-documentation/breezingforms/12-examples-scripts/764-visibility-rules-in-javascript.html

Может кто осилит скрипт?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отключить курсор в форме ?

Автор warlocksp

Ответов: 3
Просмотров: 4140
Последний ответ 24.05.2016, 01:04:48
от warlocksp
Можно ли создать в форме поле для выбора картинки

Автор ejik_off

Ответов: 0
Просмотров: 2072
Последний ответ 12.06.2013, 19:58:41
от ejik_off
Обработка Radio group в многостраничной форме

Автор karpiy

Ответов: 0
Просмотров: 2287
Последний ответ 04.04.2013, 12:50:31
от karpiy
Как сделать зависимые списки?

Автор Mishani

Ответов: 1
Просмотров: 3730
Последний ответ 17.12.2012, 21:46:01
от user
Зависимые select-list'ы получающие данные из БД

Автор alex-inc

Ответов: 1
Просмотров: 4186
Последний ответ 13.07.2010, 01:47:59
от alex-inc