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

yamenko

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Добрый день.

Мне необходимо сделать новую таблицу в другой базе данных сразу же после регистрации нового пользователя в Joomla 3.0, а также удалить ее если пользователь удалил свой аккаунт.

Нужно:
1. Подключиться к новой базе данных.
2. Добавить таблицу название которой совпадает с ID пользователя который присвоил ему Joomla.

Из этого следует:
1. Как получить сразу же этот ID?
2. Куда вставлять запрос на создание базы данных. (База будет отличаться от базы joomla).

PS никаких новых полей в форму регистрации вставлять не надо.

Заранее благодарен.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Привет!

Это все очень легко делается с помощью плагина типа user. Вам нужно событие onUserAfterSave и onUserAfterDelete. Вот пример, как это сделано в плагине Profile.

И еще материал - подключение к другой базе данных.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Создать плагин в группе юзер и вам нужно два метода onUserAfterSave - после создания пользователя, и onUserAfterDelete - после удаления юзера
например:
Код: php
function onUserAfterSave( $data, $isNew, $result, $error ){
if($isNew){//коннектимся к новой базе и вставляем данные!}
}
в $data - данные о пользователе, $isNew - говорит о том что это новый пользователь !
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Создать плагин в группе юзер и вам нужно два метода onUserAfterSave - после создания пользователя, и onUserBeforeDelete - перед удалением
Перед удалением опасно, а если в базе Joomla произойдет сбой? Лучше убедиться, что удаление прошло успешно в базе Joomla, а потом уже удалять во внешней. Здесь лучше подходит onUserAfterDelete.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Перед удалением опасно, а если в базе Joomla произойдет сбой? Лучше убедиться, что удаление прошло успешно в базе Joomla, а потом уже удалять во внешней. Здесь лучше подходит onUserAfterDelete.
Дим а если после удаления произойдет сбой то данные тоже как бы не удалятся со второй базы )
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Дим а если после удаления произойдет сбой то данные тоже как бы не удалятся со второй базы )
Ну этот вариант лучше, так как внешняя база обычно вторична (имхо). Ну тут уже решать ТС, может у него приоритет у внешней базы.
*

yamenko

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Может еще подскажите документацию на русском с описанием команд, операторов и событий.


Заранее благодарен.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Может еще подскажите документацию на русском с описанием команд, операторов и событий.


Заранее благодарен.
Я Вам дал ссылку на документацию по плагинам. А что такое команды и операторы?
*

yamenko

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
onUserAfterSave ()
onUserBeforeDelete ()
onUseAfterDelete()


+ в примерах на сайте
JPluginHelper::importPlugin()
JLoader::import()

Вот где вы это берете..... кроме этого внутри еще какие-то параметры.... что за что отвечает?
где взять полный  список с описанием как на сайте php.su или htmlbook.ru 
хотелось бы разобраться подробнее...


« Последнее редактирование: 04.10.2013, 14:49:39 от yamenko »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Такой документации на русском не найдете (к сожалению). На английском есть чуть больше про плагины:
http://docs.joomla.org/Supporting_plugins_in_your_component
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Скорее всего нигде )
а зачем вам: JPluginHelper::importPlugin() и JLoader::import()?
вы же хотите что бы в стандартной регистрации после регистрации что то внеслось в другую таблицу?
так просто создаете плагин и у него один метод, я уже писал выше:
Код: php
function onUserAfterSave( $data, $isNew, $result, $error ){
if($isNew){//коннектимся к другой базе и вставляем данные!}
}
*

yamenko

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Тогда как будет выглядеть код если удалить пользователя:

Цитировать
function onUserAfterSave( $data, $isNew, $result, $error ){
if($isNew){//коннектимся к другой базе и вставляем данные!}
}
                                    ?
                                      | | |
                                     \/\/\/
onUserAfterDelete ($data, $isNew, $result, $error )

$isNew - тоже самое будет?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Тогда как будет выглядеть код если удалить пользователя:
вам же писали посмотреть плагин /plugins/user/profile/profile.php
Код: php
public function onUserAfterDelete($user, $success, $msg){
if (!$success)
{
return false;
}

$userId = JArrayHelper::getValue($user, 'id', 0, 'int');

if ($userId)
{
//удаляем данные в второй базе...
}

return true;
}
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
yamenko - может Вам еще и весь плагин написать? ;) Я дал Вам все ссылки, извините, но на русском их нет. На английском самая главная ссылка:
http://docs.joomla.org/Portal:Developers
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Условия отображения для конкретной группы пользователей Joomla 3.4.x

Автор dmik

Ответов: 15
Просмотров: 3233
Последний ответ 29.05.2020, 22:42:15
от voland
Подключить Joomla Framework в своем файле

Автор kolhoz

Ответов: 1
Просмотров: 1777
Последний ответ 06.12.2017, 17:15:42
от Aleks.Denezh
Переделать запросы к БД под Joomla

Автор Glog

Ответов: 3
Просмотров: 1477
Последний ответ 03.07.2017, 17:53:28
от Glog
Поддержка Joomla в PhpStorm

Автор b2z

Ответов: 51
Просмотров: 11284
Последний ответ 28.12.2016, 23:31:39
от b2z
Joomla search tools

Автор jitendra

Ответов: 2
Просмотров: 1378
Последний ответ 15.12.2016, 17:13:15
от jitendra