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

EndErr

  • Новичок
  • 8
  • 0 / 0
автологин при активации
« : 27.03.2012, 11:39:32 »
пытаюсь автоматически залогинить пользователя при активации с мыла, на примере
Код
	
$dbpass = explode(':',$this->password);
$usersipass['username'] = $this->username;
$usersipass['password'] = $dbpass[0];
$mainframe->login($usersipass);
проблема в пароле, в бд оно зашифрованно, если plain то нет проблем.
вопрос: Как передать зашифрованный пароль модулю авторизации?
*

nixsystem

  • Захожу иногда
  • 207
  • 10 / 0
Re: автологин при активации
« Ответ #1 : 27.03.2012, 15:02:21 »
Пароль пользователя Joomla если он сгенерирован самой Joomla состоит из двух частей - самого хеша пароля, вычисленного из комбинации пароль+соль и, через точку, соли.
Соль (salt) добавляется для больше криптостойкости, чтобы сложнее (дольше) было подбирать пароль.
Если зайти в базу в таблицу jos_users то можно увидеть в поле password  такую строку
Код
f188e4ccd7d9e38fc1222861f2ba7b2a:wqftVAFr7VXpnqqCLIWNeZLlEZ4soFrf
где - первая часть, до ":" - "соленый" хеш, а вторая - сама соль.
Первая пароль генерируется так (это не код самой Joomla, это пример)
Код: php
$pass = 'password'; //здесь берется то значение, которое ввел пользователь в качестве пароля
$salt = 'salt'; // значение $salt Joomla генерирует автоматически для каждого пользователя уникальное
$pass_hash = md5($pass.$salt); // в данном примере в $pass_hash будет строка "b305cadbb3bce54f3aa59c64fec00dea"
$pass_for_db = $pass_hash.':'.$salt; // а это уже то, что записывается в базу, тут уже будет строка "b305cadbb3bce54f3aa59c64fec00dea:salt"

При логине Joomla ищет пользователя по имени, найдя берет $salt из поля password, заново генерирует этот соленый хеш из того пароля что ввел пользователь и той соли, что хранится в базе. Если все совпадает - то пользователя авторизует на сайте.

В вашем случае нужно сделать так
Код: php
$dbpass = explode(':',$this->password);
$usersipass['username'] = $this->username;
$usersipass['password'] = $dbpass[0].':'$dbpass[1];
$mainframe->login($usersipass);
Тогда для логина будут отправляться корректные данные.
*

EndErr

  • Новичок
  • 8
  • 0 / 0
Re: автологин при активации
« Ответ #2 : 27.03.2012, 17:14:32 »
Код
$dbpass[0].':'.$dbpass[1];
и есть
Код
$this->password
я сделал так: при регистрации хранится пароль (без шифровки) в отдельную колонку в бд, при активации используется этот пароль для автоматического входа и потом удаляется
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

письмо об подтверждении активации

Автор radiant

Ответов: 4
Просмотров: 2169
Последний ответ 09.12.2015, 09:45:32
от capricorn
Можно ли автоматизировать отправку письма активации учётных записей пользователям после их регистрац

Автор Woland66

Ответов: 14
Просмотров: 2357
Последний ответ 17.02.2012, 06:43:42
от Woland66
Не выводится сообщение что пользователю отправлено письмо со ссылкой активации

Автор Shattl

Ответов: 2
Просмотров: 1533
Последний ответ 16.06.2010, 13:57:05
от Shattl
Повторная отправка письма об активации

Автор Shverep

Ответов: 14
Просмотров: 4616
Последний ответ 21.03.2010, 14:47:34
от Shverep
Код активации аккаунта по SMS

Автор se_demon

Ответов: 6
Просмотров: 2740
Последний ответ 13.02.2010, 19:45:08
от Lexx