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

yAnTar

  • Захожу иногда
  • 296
  • 81 / 3
Может кому пригодится.
Код
<script type = "text/javascript">
  function showBorder(){
  this.style.border = '3px solid #8AB3ED';
  }
  function hideBorder(){
  this.style.border = gTextArray[this.id];
  }

  function getAllInput(){
     gTextArray = new Array();
     // Если Safari, выход
     if(navigator.userAgent.indexOf("Safari") > 0) return;
     var allInput = document.getElementsByTagName('input');
     var count = allInput.length;
     for(var i = 0; i < count; i++){
      if (allInput[i].type != 'text') continue;
        // Проверка для ІЕ, если ІЕ - то ставим border 2px inset
        gTextArray[allInput[i].id] = (allInput[i].style.border) ? (allInput[i].style.border) : ((navigator.userAgent.indexOf("MSIE") > 0)? ('2px inset') : (''));
      try {
        allInput[i].addEventListener('focus', showBorder, false);
        allInput[i].addEventListener('blur', hideBorder, false);
      } catch (e){
          allInput[i].onfocus = showBorder;
          allInput[i].onblur = hideBorder;
      }
     }
  }
</script>
Вызов функции
<script type = "text/javascript">
  getAllInput();
</script>
Работает в ІЕ 6.0, 7.0, Firefox 2.0.0.7, Opera 9.10
« Последнее редактирование: 12.10.2007, 17:52:10 от yAnTar »
Firefox the best, Google the best, jQuery the best.
yAnTar блог
*

maragva

  • Захожу иногда
  • 103
  • 1 / 0
эммм... Не очень разбираюсь. Как этим пользоваться? И это... я не юзал Сафари (шепотом)

*

yAnTar

  • Захожу иногда
  • 296
  • 81 / 3
2
эммм... Не очень разбираюсь. Как этим пользоваться? И это... я не юзал Сафари (шепотом)

Пользоваться - вставить код в тело скрипта (можно оформить отдельным файлом и подключить его).
А результат такой - когда попадает фокус на текстовое поле - оно получает бордер (это так в Сафари есть).
Firefox the best, Google the best, jQuery the best.
yAnTar блог
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как выровнять значения полей?

Автор THE KILLERS

Ответов: 3
Просмотров: 1291
Последний ответ 30.10.2015, 18:18:44
от THE KILLERS
Подсветка выпадающего меню Od jshopping categories

Автор kurakin

Ответов: 4
Просмотров: 1849
Последний ответ 21.10.2015, 12:52:48
от kurakin
При наведении на название полей в контактах, названия мифически исчезают

Автор RazarioAgro

Ответов: 4
Просмотров: 1297
Последний ответ 11.06.2015, 14:12:57
от vipiusss
Подключить стиль только для сафари

Автор Ragnos

Ответов: 0
Просмотров: 1345
Последний ответ 07.03.2015, 16:23:51
от Ragnos
@media для Сафари

Автор kik84

Ответов: 0
Просмотров: 1255
Последний ответ 12.12.2014, 18:54:11
от kik84