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

varando

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Доброго времени суток всем.
Возникла такая проблема.
Установил Joomla 3.8.0 + языковой пакет. Вышла ошибка, что нужно обновить php и обновил денвер до 3. Все заработало и никаких ошибок нет. Дальше установил VirtueMart 3.2.4 + язык русский. Теперь в меню VirtueMart при нажатии на многие разделы выходит ошибка такого образца

Обнаружена ошибка.
1146 Table '  .#__virtuemart_vendors_ru_ru' doesn't exist

Прошу помочь с решением данной проблемы. Если кто знает решение, то попрошу детально описать, так как опыта у меня мало ...
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
и обновил денвер до 3
Устарел Денвер сильно, рекомендую посмотреть вот это.

Касательно вашей ошибки - написано, что таблица #__virtuemart_vendors_ru_ru не существует. Посмотрите в базе, есть там такая таблица? Если да, правильный ли у нее префикс?
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

varando

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Устарел Денвер сильно, рекомендую посмотреть вот это.

Касательно вашей ошибки - написано, что таблица #__virtuemart_vendors_ru_ru не существует. Посмотрите в базе, есть там такая таблица? Если да, правильный ли у нее префикс?


Благодарю. Денвер я обновил, но буду иметь ввиду в следующий раз ваш совет.
Ок, где это посмотреть в какой папке. Если можно, подробнее пожалуйста.
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Ок, где это посмотреть в какой папке.
Посмотреть это можно в базе данных вашего сайта. Войдите в phpMyAdmin, найдите вашу базу и посмотрите, есть ли там таблица, о которой вам сообщается.
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

Екатерина

  • Новичок
  • 2
  • 0 / 0
У меня такая же ошибка, в базе данных действительно нет такой таблицы. Подскажите, что делать в этом случае? Если создавать, то что именно туда вписывать, либо может можно скачать?
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Ответ на ваш вопрос здесь. Попробуйте решить проблему предложенным там способом.
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

Andrey11

  • Новичок
  • 1
  • 0 / 0
Joomla 3.8.7, VirtueMart 3.2.14.

Установщик VirtueMart состоит из 3 файлов:
com_virtuemart.3.2.14.9808
com_virtuemart.3.2.14.9808_ext_aio
com_tcpdf_1.0.4

После установки первого файла админка VirtueMart ругается той самой ошибкой.
До установки второго файла, если хотим в процессе установки использовать заполнение демонстрационными данными, нужно выполнить следующее (если не хотим, то можно это сделать и после завершения установки).

Выбираем в верхнем меню: Компоненты -> VirtueMart -> Конфигурация
Ищем выпадающее меню выбора языка (Shop language).

В моем случае при установке Joomla был выбран русский язык и для сайта, и для панели управления без мультиязычности. Админка VirtueMart появилась сразу на русском языке. В меню выбора языка (Shop language) был включен русский и доступен к выбору также английский, но ниже в списке "Языки поддерживаемые магазином" был только английский.

Теперь главный фокус: переключаем Shop language на английский (сохранить) и обратно на русский (сохранить).
При включении русского языка создаются таблицы с префиксом _ru_ru и в списке "Языки поддерживаемые магазином" появляется также русский.

Далее можно ставить второй файл установщика и у него будет работать кнопка "Установить Демо-данные" (без вышеописанных действий выдавало ту же ошибку).
« Последнее редактирование: 20.05.2018, 00:45:30 от fsv »
*

brandman

  • Новичок
  • 1
  • 0 / 0
Просто, в настройках языка компонента нужно с глобального русского переставить язык на установленный русский
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибка 1146 Table 'moyshaco_joom446.#__virtuemart_vendors_ru_ru' doesn't exist

Автор skavem

Ответов: 5
Просмотров: 5187
Последний ответ 18.10.2017, 17:12:45
от hypo999
Выдает ошибку не пойму в чем дело, можете помочь?Выходит на главной странице сайта

Автор Ansar

Ответов: 2
Просмотров: 1038
Последний ответ 09.05.2015, 19:30:23
от motokraft
Демо-данные не доступны при установке русского языка, в чём дело?

Автор rsmol

Ответов: 12
Просмотров: 7779
Последний ответ 29.01.2015, 20:03:09
от zhenik
Ошибки VirtueMart 2 gпри установке

Автор Bodun

Ответов: 0
Просмотров: 1365
Последний ответ 05.01.2015, 16:37:55
от Bodun
Warning: Division by zero Прошу помощи!

Автор talerillo

Ответов: 4
Просмотров: 3667
Последний ответ 04.04.2014, 23:58:00
от talerillo