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

speakme

  • Осваиваюсь на форуме
  • 23
  • 0 / 0
Задача: добавить новые типы в VirtueMart 1.1.4 через CSVI 1.9
Как я делаю:
1) Добавляю несколько типов товаров в Virtuemart
2) Экспортирую типы товаров через CSVI в файл csv
Поля: product_type_id^product_type_list_order^product_type_name^product_type_publish
3) Добавляю в эту таблицу csv еще типы товаров
4) Импортирую таблицу типов
В CSVI импорт проходит успешно, а вот в VirtueMart новые типы не появляются.. Поможете разобраться?
Может сначала надо импортировать Названия типов?
« Последнее редактирование: 10.07.2010, 12:50:37 от speakme »
*

speakme

  • Осваиваюсь на форуме
  • 23
  • 0 / 0
Если сначала импортировать Названия типов, то CSVI пишет: ID типа продукта не найден
*

speakme

  • Осваиваюсь на форуме
  • 23
  • 0 / 0
В таблицу vm_product_type Типы товаров не добавляются.. Наверняка опять мелко собака зарыта. В чем тут может быть дело?
*

speakme

  • Осваиваюсь на форуме
  • 23
  • 0 / 0
Еще обратил внимание, что через CSVI можно править уже созданные типы в VirtueMart,
но как же добавлять новые через CSVI?
*

mcgraff

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
разговор сам собой) мне нравится))))
*

speakme

  • Осваиваюсь на форуме
  • 23
  • 0 / 0
остроумный нашелся
*

stalkervp

  • Осваиваюсь на форуме
  • 44
  • 3 / 0
При создании типа товара в ВМ в таблицу _vm_product_type прописывается новая запись с данными по новому типу (product_type_id, product_type_name и тд), в таблицу _vm_product_type_parameter (product_type_id, parameter_name, и тд), а также создается новая таблица в БД _vm_product_type_N , где N - это product_type_id данного типа товара, похоже на то, что CSVI не может создать эту таблицу, поэтому и новый тип через импорт не появляется
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

1C УТ 8.x <-> VirtueMart по протоколу CommerceML

Автор Centoff

Ответов: 1315
Просмотров: 215187
Последний ответ 27.10.2020, 15:32:10
от Leo1986
Чистый файл импорта для CSVI

Автор Solvedor

Ответов: 157
Просмотров: 51214
Последний ответ 15.02.2018, 12:42:30
от owl_ssp
Импорт из CSV товаров с типами и свойствами из

Автор Gruz

Ответов: 499
Просмотров: 151052
Последний ответ 23.02.2017, 15:15:42
от orchanin
Как импортировать файл XML в Joomla VirtueMart?

Автор Кот Смюлан

Ответов: 2
Просмотров: 5186
Последний ответ 14.07.2016, 18:40:24
от Berzerker
импорт товаров в YML Яндекс маркет

Автор zmeyx

Ответов: 5
Просмотров: 11482
Последний ответ 14.07.2016, 18:34:28
от Berzerker