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

Duff89

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Доп. поле со значением array
« : 28.12.2015, 23:12:09 »
Задача узнать значение доп. поля в к2. Делаю так:
Код
$extra_fields = json_decode($row->extra_fields );
$phones = $extra_fields[2]->value;//значение доп поля с id2
Все выводиться как нужно, но одно доп. поле почему-то всегда возвращает значение array.Тип поля - текстовое поле, ничем не отличается от других.В чем может быть причина?
Joomla! 3.4.5 K2 v2.6.9
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Доп. поле со значением array
« Ответ #1 : 28.12.2015, 23:26:06 »
Причина в том, что json_decode декодирует json-строку и возвращает (в вашем случае) объект, который может содержать массив (array). Странно, что вы задали такой вопрос, сумея при этом написать код преобразования json в PHP-переменную.
P.S. если я правильно понял, то значение данного поля представляет собой массив, и если вы делаете echo, то вы увидите на выходе array().
« Последнее редактирование: 28.12.2015, 23:37:21 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Duff89

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Доп. поле со значением array
« Ответ #2 : 28.12.2015, 23:32:01 »
Приведу кусок кода чуть больше
Код
$extra_fields = json_decode($row->extra_fields );
$phones = $extra_fields[2]->value;//возвращает номер телефона.все ок
$phones2 = $extra_fields[11]->value;// работает тоже
$phones3 = $extra_fields[12]->value;// работает тоже
$email = $extra_fields[3]->value;//работает тоже
$msgs = $extra_fields[4]->value;//нихрена не работает.возвращает array
Во всех полях ввожу только числа
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Доп. поле со значением array
« Ответ #3 : 28.12.2015, 23:38:37 »
Смотрите P.S. предыдущего поста и попробуйте делать
Код: php-brief
print_r($msgs);
Не будь паразитом, сделай что-нибудь самостоятельно!
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Re: Доп. поле со значением array
« Ответ #4 : 28.12.2015, 23:42:09 »
var_dump($extra_fields[4]->value);
А лучше перебрать в цикле. У вас завтра поля добавятся/убавятся, ключи массива сменятся и это работать перестанет.
*

Duff89

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Доп. поле со значением array
« Ответ #5 : 29.12.2015, 00:05:40 »
Заранее извиняюсь, я не так силен в php как хотелось бы.
Правильно ли я делаю
Код
$debt = var_dump($extra_fields[4]->value);
Данный код ничего не выводит..
P.S. echo со старым кодом выводит array

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

passer

  • Завсегдатай
  • 1013
  • 75 / 3
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Доп. поле со значением array
« Ответ #7 : 29.12.2015, 00:18:33 »
Код
$debt = var_dump($extra_fields[4]->value);
Данный код ничего не выводит..
Он и не должен ничего выводить.
Просто var_dump или print_r, и это только с целью дебажить код.
P.S. echo со старым кодом выводит array
Просто никак не могу понять почему значение одних полей выводятся без проблем, а другие никак
Еще раз
значение данного поля представляет собой массив, и если вы делаете echo, то вы увидите на выходе array().
Если после этого все равно не понимаете, то идите изучать PHP.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Duff89

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Доп. поле со значением array
« Ответ #8 : 29.12.2015, 02:49:39 »
Ситуация прояснилась в довольно интересную сторону.
Код
$extra_fields = json_decode($row->extra_fields );
$phones = $extra_fields[2]->value;//код работает.Возвращает реальное значение
$debt = $extra_fields[1]->value;//код работает.Возвращает реальное значение
$fio = $extra_fields[4]->value;//код не работает. Возвращает значение array
$email = $extra_fields[3]->value;//код работает.Возвращает реальное значение
Перепробовал кучу самых разных вариантов и пришел к выводу, что данный код нормально работает только для доп. полей с id: 1,2 или 3. доп.поле с id 4 и выше всегда возвращает значение array. Может кто подскажет из-за чего такое может быть?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Доп. поле со значением array
« Ответ #9 : 29.12.2015, 08:55:03 »
ТС, вы вообще читаете, что вам писали?
Последний раз: потому что значения этих полей являются массивами.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Duff89

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Доп. поле со значением array
« Ответ #10 : 29.12.2015, 10:06:32 »
Конечно читаю, то что мне пишут, спасибо большое за ответы. Но объясните как доп.поле(текстовое поле) с id3 возвращает реальное значения, а уже доп.поле(текстовое поле) с id4 и введеными в него теми же цифрами уже идет как массив.Просто хочется докопаться до причины.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Доп. поле со значением array
« Ответ #11 : 29.12.2015, 10:21:13 »
Но объясните как доп.поле(текстовое поле) с id3 возвращает реальное значения, а уже доп.поле(текстовое поле) с id4 и введеными в него теми же цифрами уже идет как массив.
Потому что одни данные записываются в БД как текст, другие - как массив. Еще почему? Потому что разработчик так хотел.
Ваше дело - обрабатывать данные в зависимости от их типов или переписать форму, чтобы эти данные имели нужный тип, а не задавать глуппые вопросы. Столько ответов, а вы все стоите на одном месте.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Duff89

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Доп. поле со значением array
« Ответ #12 : 29.12.2015, 10:32:46 »
Странно конечно все это, но в принципе вопрос решен.Буду использовать только поля с id1,2,3.Всем спасибо
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Дополнительное поле Ссылка / Как изменить текст?

Автор designerandrey

Ответов: 6
Просмотров: 997
Последний ответ 20.07.2020, 16:56:57
от designerandrey
Заброс в БД для массового добавления значений в доп. поле k2

Автор lgmax

Ответов: 2
Просмотров: 976
Последний ответ 16.09.2019, 11:33:11
от beliyadm
Как включить полноценный редактор в доп. поле?

Автор bybus

Ответов: 0
Просмотров: 1084
Последний ответ 24.11.2017, 13:28:18
от bybus
K2 убрать поле InfoText

Автор Dusk09

Ответов: 0
Просмотров: 973
Последний ответ 26.10.2017, 12:35:14
от Dusk09
1 доп. поле в нескольких групах

Автор terr

Ответов: 0
Просмотров: 921
Последний ответ 06.10.2016, 14:43:19
от terr