Factory::getApplication->triggerEvent
На j4 или j3? и конкретного плагина или всех плагинов группы?
j4 для моего плагина, мне нужно обратиться к методу плагина и получить данные из плагина. Я вроде как вижу что через ивент это делают, но не уверен должен ли по результату работы ивент что-то возвращать в то место откуда его вызвали. Сейчас хендлер ивента вызывается, но не возвращает данные хендера в место вызова ивента.
$result = Factory::getApplication()->triggerEvent('myEvent'); в ресалте пустой массив
В плагине return стоит?
public static function triggerPlugin($type = null, $plugin = null, $event = null, $args = array()) { if (empty($type) || empty($plugin) || empty($event)) return false; if (self::$_plugins === null) self::$_plugins = array(); $key = 'plg_' . $type . '_' . $plugin; if (!isset(self::$_plugins[$key])) { // Initialize plugin $className = 'plg' . $type . $plugin; if (PluginHelper::getPlugin($type, $plugin)) { if (!class_exists($className)) PluginHelper::importPlugin($type, $plugin); Factory::getLanguage()->load($key, JPATH_ADMINISTRATOR); self::$_plugins[$key] = $className; } else self::$_plugins[$key] = false; } // Get plugin if (!$plugin = self::$_plugins[$key]) return false; if (!method_exists($plugin, $event)) return false; $result = false; if ((new Version())->isCompatible('4.0')) { /* @var \Joomla\Event\Dispatcher $dispatcher */ $dispatcher = Factory::getApplication()->getDispatcher(); $listeners = $dispatcher->getListeners($event); foreach ($listeners as $listener) { if ((is_a((new ReflectionFunction($listener))->getClosureThis(), $plugin))) { $call = false; if ($args instanceof Event) $call = $args; elseif (\is_array($args)) $call = new Event($event, $args); if ($call) { $listener($call); if (isset($call['result']) && !is_null($call['result'])) $result = $call['result'][0]; } } } } else { $dispatcher = JEventDispatcher::getInstance(); $observers = $dispatcher->get('_observers'); foreach ($observers as $observer) { if (is_a($observer, $plugin)) { $result = call_user_func_array(array($observer, $event), $args); break; } } } return $result; }
Тригернет все доступные плагины по этому event
impot plugin не сделал
Название ивента вставьте своё
оно есть - myEvent
А здесь не myEvent))
в массиве регистрируется ивент и колбек, разве не так?
чтото я не вижу в j4 такого метода
Обсуждают сегодня