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

char

  • Новичок
  • 7
  • 0 / 0
Есть такое js меню. ЗЫ http://designforjoomla.com/content/view/75/138/


когда ставлю модуль с меню на left все работает норм, подменю выкидываются как положено.

Поставил модуль в шапку, в див абсолютно позиционируемый. Начались невероятные вещи. Вобщем смотрите сами http://www.ok-businessgroup.ru/ (навести на услуги)

Ниже приведу код

index.php
Код
<div id="topbg">

<div id="header">

<div  id="user5">

<?php if (mosCountModules('user5')) { ?>
<?php mosLoadModules ( 'user5' ); ?>
<?php } ?>

</div>

<div  id="banner">

<?php if (mosCountModules('banner')) { ?>
<?php mosLoadModules ( 'banner', -1 ); ?>
<?php } ?>

</div>

css
Код
#header {
  background     : url(../images/header.jpg) no-repeat 0 0;
  height         : 228px;
    }

#topbg {
    background     : #fff;
    height         : 228px;
    border-bottom  : 2px;
           }
#user5 {
  position       : absolute;
  top            : 76px;
  left           : 93px;
  width         : 121px;
 }

#banner {
  position       : absolute;
  top            : 90px;
  right          : 10px;
  height         : 70px;
 
 }

/** CSS for Mainmenu **/

a.mainlevel  {
 display           : block;
 width             : auto !important;
 width             : auto;
  margin           : 1px 0;
  padding          : 0;
  background       : fff;
 
}

a.mainlevel:link, a.mainlevel:visited {
  display          : block;
  font-size        : 14px;
  font-weight      : normal;
  border-bottom    : 1px solid #d6d6d6;
  padding-top      : 6px;
  padding-bottom   : 7px;
  color            : #000;
  padding-right    : 7px;
  padding-left     : 7px;
  background       : #fff;
  text-decoration  : none;

}
a.mainlevel:hover {
  border-bottom    : 1px solid #d6d6d6;
  font-size        : 14px;
  font-weight      : normal;
  padding-top      : 6px;
  padding-bottom   : 7px;
  color            : #f00;
  text-decoration  : none;
  padding-right    : 7px;
  text-decoration  : none;
  background       : #fff;

}
#active_menu {
  color            : #f00;
  border-bottom    : 1px solid #d6d6d6;
  background       : #fff;
  text-decoration : none;

}
a#active_menu:hover {
  color            : #f00;
  border-bottom    : 1px solid #d6d6d6;
}

/** Sublevel for Mainmenu **/

.sublevel {
   font-family      : Arial, Helvetica, sans-serif;
   font-size        : 12px;
   padding      : 5px 1px 3px 5px;
   margin   : 3px;
}
a.sublevel:link, a.sublevel:visited {
  color       : #000;
  text-decoration : none;
}
a.sublevel:hover {
  color            : #f00;
  text-decoration  : none;
}
a.sublevel#active_menu  {
background      : transparent;
color           : #000;
border          : 0;
     
}

« Последнее редактирование: 20.10.2008, 13:57:46 от char »
*

char

  • Новичок
  • 7
  • 0 / 0
Re: TransMenu работает неправильно
« Ответ #1 : 21.10.2008, 21:01:23 »
Траблу решил, не понял почему но трабла была в абсолютном позционировании
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не работает пункт меню в админке Новый материал

Автор NICTO

Ответов: 8
Просмотров: 4843
Последний ответ 01.05.2022, 19:01:23
от Maksdal
Не работает главная страница.

Автор dance000

Ответов: 14
Просмотров: 11736
Последний ответ 01.02.2015, 17:17:01
от beliyadm
Некорректно работает модуль обратной связи.

Автор mr.dil

Ответов: 1
Просмотров: 2318
Последний ответ 08.10.2012, 15:17:57
от mr.dil
Не работает стандартная форма обратной связи

Автор Андрей

Ответов: 11
Просмотров: 6522
Последний ответ 26.03.2010, 10:57:04
от Alex NET
не работает HTML редактор в содержимом

Автор supernoob

Ответов: 1
Просмотров: 2139
Последний ответ 17.11.2009, 22:34:21
от supernoob