Новости 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 Гость просматривают эту тему.
  • 16 Ответов
  • 1267 Просмотров
*

Hunter342

  • Новичок
  • 7
  • 0 / 0
Переменные
« : 07.02.2014, 14:17:19 »
Здравствуйте, я не могу сделать, чтобы было заместо текста, значение из переменной, например

например:

Здравствуйте, $UserLogin = Здравствуйте, User123

Как такое сделать?

понимаю, что вопрос нубский, но все же, я же только начал изучить Joomla
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Переменные
« Ответ #1 : 07.02.2014, 15:07:59 »
echo $UserLogin?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Переменные
« Ответ #2 : 07.02.2014, 15:11:13 »
Недостаточно инфы. Где Вы хотите это вывести? Ну а вообще доступ к объекту текущего пользователя:
Код: php
<?php echo JFactory::getUser()->username; ?>
*

Hunter342

  • Новичок
  • 7
  • 0 / 0
Re: Переменные
« Ответ #3 : 07.02.2014, 15:16:24 »
Недостаточно инфы. Где Вы хотите это вывести? Ну а вообще доступ к объекту текущего пользователя:
Код: php
<?php echo JFactory::getUser()->username; ?>

Мне это нужно вывести, в меню пользователя, там же где и функции: редактировать профиль, выйти, и т.д.
*

Hunter342

  • Новичок
  • 7
  • 0 / 0
Re: Переменные
« Ответ #4 : 07.02.2014, 15:17:39 »
Кстати, есть ли уроки работы с Joomla?
- Оч. хотелось бы посмотреть, или почитать
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Переменные
« Ответ #5 : 07.02.2014, 15:18:26 »
Мне это нужно вывести, в меню пользователя, там же где и функции: редактировать профиль, выйти, и т.д.
Так это модуль итак сам выводит.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Переменные
« Ответ #6 : 07.02.2014, 15:21:55 »
Может у ТС в шаблоне модуль был переопределён, потому и не выводит.
*

Hunter342

  • Новичок
  • 7
  • 0 / 0
Re: Переменные
« Ответ #7 : 07.02.2014, 15:32:07 »

Вот картинка, что я имею ввиду.

- Мне нужно взамен той надписи на картинке (Выделенной красным контуром)
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Переменные
« Ответ #8 : 07.02.2014, 15:37:02 »
Нужно отключить отображения заголовка модуля, а в шаблоне модуля прописать тот код, что b2z привёл.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Переменные
« Ответ #9 : 07.02.2014, 15:41:06 »
Нужно отключить отображения заголовка модуля, а в шаблоне модуля прописать тот код, что b2z привёл.
Все равно, получится не совсем так. Нужно еще стилизовать надпись под заголовок модуля...
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Переменные
« Ответ #10 : 07.02.2014, 15:42:10 »
Нужно отключить отображения заголовка модуля, а в шаблоне модуля прописать тот код, что b2z привёл.
Вот только возможно это обычный вывод меню через mod_menu )
*

Hunter342

  • Новичок
  • 7
  • 0 / 0
Re: Переменные
« Ответ #11 : 07.02.2014, 15:44:23 »
так, где отключить заголовок модуля, я нашел  ^-^ а вот куда прописывать код, подскажите новичку  ^-^ ^-^
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Переменные
« Ответ #12 : 07.02.2014, 15:55:56 »
Ну да, придётся ещё стилизовать конечно. Шаблон переопределяется здесь templates/ваш-шаблон/html/тип-модуля/default.php. Для меню, например, тип будет mod_menu
*

Hunter342

  • Новичок
  • 7
  • 0 / 0
Re: Переменные
« Ответ #13 : 07.02.2014, 16:10:47 »
Папки mod_menu нет в Templates/мой-шаблон/html/
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Переменные
« Ответ #14 : 07.02.2014, 16:16:02 »
Значит нужно её создать.
*

Hunter342

  • Новичок
  • 7
  • 0 / 0
Re: Переменные
« Ответ #15 : 08.02.2014, 16:11:31 »
А дальше?
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Re: Переменные
« Ответ #16 : 08.02.2014, 17:07:10 »
Нужно скопировать стандартный шаблон модуля и менять на свой вкус. Например, для модуля авторизации:
Из modules\mod_login\tmpl\ в templates\шаблон\html\mod_login\ файл default.php. Недостающие папки создать. Обратите внимание, папку tmpl создавать не нужно. из mod_login\tmpl нужно копировать сразу в mod_login.
С остальными модулями так же. И с компонентами тоже.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться