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

Artus84

  • Осваиваюсь на форуме
  • 23
  • 1 / 0
 :D Подскажите по настройке ChronoForms5 на Joomla 3.3.6. В форме есть выпадающий список. Нужно что бы при выборе определенного пункта списка, почта уходила на один email. При выборе другого пункта на другой email. В списке 10 пунктов  а email-ов два. Вот по 5 пунктов на email. Так будет каждый менеджер получать свою категорию клиентов. Такое возможно сделать на ChronoForms?
*

yura_yushkevich

  • Осваиваюсь на форуме
  • 31
  • 0 / 0
Здравствуйте. Такая же проблема и такая же задача.... Помогите пожалуйста реализовать.
*

Artus84

  • Осваиваюсь на форуме
  • 23
  • 1 / 0
Здравствуйте. Такая же проблема и такая же задача.... Помогите пожалуйста реализовать.
Проблему еще не решил. На сайте разработчика вроде что то находил. Но надо разбираться.
*

MrAlexSid

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Нашёл два разных решения, но оба не работают.

Первое решение:
1. Создаю скрытое текстовое поле (Text Box) с ID, к примеру email.
2. Создаю группу флажков (Checkbox Group), в зависимости от выбора которых, письма с формой будут отправляться на тот или иной эл. адрес.
3. В событиях Checkbox Group указываю адреса эл. почты:
Спойлер
[свернуть]
В последнем столбце указываю getElementById('email').value='name@domain.com', чтобы эл. адрес name@domain.com был прописан в текстовое поле с ID=email
4. В настройке почты, на вкладке "Расширенный" (Advanced), в первой строке Динам. адрес (Dynamic To) указываю ID скрытого текстового поля email
Debugger показывает, что значения эл. почты не передаются:
Код
[recipients] => em2
[email] => пусто
recipients - это ID Checkbox Group
Вроде все верно. Ошибка может быть только в конструкции getElementById('email').value='name@domain.com'. Подскажите, если где ошибаюсь. У меня ChronoForms v5, Joomla 3
Источник

Второе решение:
1. Создаю ту же группу флажков (Checkbox Group), в зависимости от выбора которых, письма с формой будут отправляться на тот или иной эл. адрес.
ID задаю recipients, в Options прописываю:
Код
em1=эл.почта 1
em2=эл.почта 2
em3=эл.почта 3
2. В настройках, в On submit создаю пользовательский код (Custrom Code), в котором прописываю:
Код
<?php
// set a default recipient
$recipient = 'em1';
if ( isset($form->data['recipients']) && $form->data['recipients'] ) {
  $recipient = $form->data['recipients'];
}
$emails = array (
  'em1' => 'name1@domain.com',
  'em2' => 'name2@domain.com',
  'em3' => 'name3@domain.com');
$form->data['email_to_use'] = $emails[$recipient];
?>
3. Получаю требуемый эл. адрес email_to_use и, как в первом варианте, указываю это значение в настройках E-Mail, на вкладке "Расширенный" (Advanced), в первой строке "Динам. адрес" (Dynamic To).
Тоже не работает.
Если флажок не ставить, работает строчка $recipient = 'em1';
Если поставить, то вышеуказанный код не работает. В отладке показывает:
[email_to_use] => пусто.
И ошибку выдает: "Mailer Error: You must provide at least one recipient email address."
Подскажите, где может быть ошибка?
Источник
Сама моя форма здесь, Debugger пока включён.
« Последнее редактирование: 14.12.2015, 16:09:24 от MrAlexSid »
*

MrAlexSid

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
С первым решением разобрался.
К коду getElementById('email').value='name@domain.com' нужно в начале дописать document.
Должно получиться так:
Код
document.getElementById('email').value='name@domain.com'
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Несколько форм на странице

Автор maddestiny

Ответов: 6
Просмотров: 7077
Последний ответ 05.02.2019, 13:03:48
от andreytver
ajax отправка

Автор herr

Ответов: 21
Просмотров: 4066
Последний ответ 22.11.2018, 18:37:38
от herr
ChronoForms - Этот адрес электронной почты защищён от спам-ботов

Автор tao2en

Ответов: 1
Просмотров: 1724
Последний ответ 02.05.2016, 11:46:25
от meatrich
Генерация номера заказа и отправка его на мыло

Автор TakT

Ответов: 4
Просмотров: 4948
Последний ответ 18.01.2016, 05:09:44
от Xzizz
Необходимо указать хотя бы одного получателя электронной почты

Автор dantist433

Ответов: 1
Просмотров: 1337
Последний ответ 17.04.2015, 15:00:45
от dantist433