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

Pavel

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
UddeIM 4 переход на php 7.2
« : 03.02.2019, 20:27:18 »
Доброго времени суток всем!

При переходе на php 7.2   появляется проблемка с функцией  count() при массовом удалении сообщений если пользователь не
выбрал ни одного.
Ошибка : Warning: count(): Parameter must be an array or an object that implements Countable in ..........

Функция count() в php 7.2 устарела.

Подскажите пожалуйста, как поправить код:

Код
function uddeIMdeleteOutbox($myself, $item_id, $arcmes, $limit, $limitstart, $config) {
$n = count($arcmes);
if (!$n) {
echo _UDDEIM_NOMSGSELECTED."<br /><a href='javascript:history.go(-1)'>"._UDDEIM_BACK."</a>";
return;
}
for ($i = 0; $i <= ($n-1); $i++) {
$rightnow=uddetime($config->timezone);
if($arcmes[$i]>0) {
uddeIMdeleteMessageFromOutbox($myself, $arcmes[$i], $rightnow);
}
}
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: UddeIM 4 переход на php 7.2
« Ответ #1 : 03.02.2019, 20:30:10 »
Код: php
if (!$n) {
заменить на
Код: php
if (empty($arcmes)) {
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Pavel

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Re: UddeIM 4 переход на php 7.2
« Ответ #2 : 03.02.2019, 20:43:39 »
Код: php
if (!$n) {
заменить на
Код: php
if (empty($arcmes)) {


Увы это ничего не меняет (
сама функция count() устарела при нуле выдает ошибочку,  так как параметр должен быть массивом или объектом
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: UddeIM 4 переход на php 7.2
« Ответ #3 : 03.02.2019, 21:04:23 »

Увы это ничего не меняет (
сама функция count() устарела при нуле выдает ошибочку,  так как параметр должен быть массивом или объектом
Код: php
$n = count($arcmes);
это не обязательно использовать...
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Pavel

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Re: UddeIM 4 переход на php 7.2
« Ответ #4 : 03.02.2019, 21:15:28 »
Код: php
$n = count($arcmes);
это не обязательно использовать...
Как это так, не обязательно? весь вопрос в том и состоит что если пользователь выбрал хотя бы одно сообщение из списка оно должно удаляться
и удаляется без вывода ошибки, а ошибка выходит только при ноле
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: UddeIM 4 переход на php 7.2
« Ответ #5 : 03.02.2019, 21:22:24 »
Код: php
echo _UDDEIM_NOMSGSELECTED."<br /><a href='javascript:history.go(-1)'>"._UDDEIM_BACK."</a>";
выводится когда пользователь выбрал хоть одно сообщение или нет?

Не важно что содержит переменная $arcmes, если она пуста то выполняется код (это если использовать моё условие)
Код: php
echo _UDDEIM_NOMSGSELECTED."<br /><a href='javascript:history.go(-1)'>"._UDDEIM_BACK."</a>";
return;
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Pavel

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Re: UddeIM 4 переход на php 7.2
« Ответ #6 : 03.02.2019, 21:24:57 »
Выводится когда пользователь  НЕ выбрал ни одно сообщения.
*

Pavel

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Re: UddeIM 4 переход на php 7.2
« Ответ #7 : 03.02.2019, 21:28:46 »
echo "Не выбраны сообщения!"<br /><a href='javascript:history.go(-1)'>"Назад"</a>";
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: UddeIM 4 переход на php 7.2
« Ответ #8 : 03.02.2019, 21:29:12 »
Выводится когда пользователь  НЕ выбрал ни одно сообщения.
значит условие правильное
Код: php
function uddeIMdeleteOutbox($myself, $item_id, $arcmes, $limit, $limitstart, $config) {
if (empty($arcmes)) {
echo _UDDEIM_NOMSGSELECTED."<br /><a href='javascript:history.go(-1)'>"._UDDEIM_BACK."</a>";
return;
}
for ($i = 0; $i <= ($n-1); $i++) {
$rightnow=uddetime($config->timezone);
if($arcmes[$i]>0) {
uddeIMdeleteMessageFromOutbox($myself, $arcmes[$i], $rightnow);
}
}
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Pavel

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Re: UddeIM 4 переход на php 7.2
« Ответ #9 : 03.02.2019, 21:37:31 »
Код: php
function uddeIMdeleteOutbox($myself, $item_id, $arcmes, $limit, $limitstart, $config) {
if (empty($arcmes)) {
echo _UDDEIM_NOMSGSELECTED."<br /><a href='javascript:history.go(-1)'>"._UDDEIM_BACK."</a>";
return;
}
if ($arcmes != NULL){
$n = count($arcmes);
for ($i = 0; $i <= ($n-1); $i++) {
$rightnow=uddetime($config->timezone);
if($arcmes[$i]>0) {
uddeIMdeleteMessageFromOutbox($myself, $arcmes[$i], $rightnow);
}
}
}

Заработало!
НО только ТАК

« Последнее редактирование: 29.07.2019, 08:53:15 от Taatshi »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как установить компонент uddeIM?

Автор Алишер

Ответов: 4
Просмотров: 2023
Последний ответ 07.01.2019, 20:46:26
от polezniy
Не устанавливается uddeIM

Автор Yury25

Ответов: 15
Просмотров: 3549
Последний ответ 05.01.2019, 01:49:23
от polezniy
Не устанавливается uddeim. Что не понимаю?

Автор birdsva

Ответов: 5
Просмотров: 3384
Последний ответ 05.01.2019, 01:03:53
от polezniy
mod uddeim simple notifier нужна помощь с коррекцией url

Автор n_i_x

Ответов: 2
Просмотров: 1171
Последний ответ 12.10.2016, 04:42:54
от n_i_x
Не работает переход по ссылкам с главной страницы

Автор Grunya

Ответов: 0
Просмотров: 1170
Последний ответ 05.08.2016, 17:49:10
от Grunya