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

cyberbattler

  • Осваиваюсь на форуме
  • 30
  • 0 / 0
Вообщем вопрос опять к ГУРУ :)

Есть поле cb_banans у нас на сайте, помог один оч хороший программер -  сделал автопополнение баланса через робоксчеинж, вот на это поле - cb_balans отображается поступление д.с от юзеров... Сейчас программер отдыхает, зимние каникулы). Собственно вопрос в следующем:

каким скриптом можно суммировать значения полей "cb_balans" всех юзров? (Значение только "числовые", естественно)

Спасибо
« Последнее редактирование: 09.01.2008, 20:38:31 от cyberbattler »
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
в MySQL функция SUM есть...
FAQ смотрел? Версию указал?
*

cyberbattler

  • Осваиваюсь на форуме
  • 30
  • 0 / 0
tnx) опять ты) а как вывести в модуль?)))
*

cyberbattler

  • Осваиваюсь на форуме
  • 30
  • 0 / 0
Блин не нашел этот SUM :(  в phpMyAdmin надо искать ведь?
*

cyberbattler

  • Осваиваюсь на форуме
  • 30
  • 0 / 0
Нашел:)
SELECT SUM( cb_balans )
FROM jos_comprofiler

Спасибо!

Но есть ли способ вывести это на сайт?
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Ну так добавить немного кода туда, где уже что-то выводит... По аналогии, так сказать...
FAQ смотрел? Версию указал?
*

cyberbattler

  • Осваиваюсь на форуме
  • 30
  • 0 / 0
Пытаюсь в php вставлять такую фичу, но не получается...

<?php
$db="wwwoverprousersru_joomla1";
$table="0";
$host="0";        (0) -спрятаны
$user="0";
$pass="0";
 
$link = mysql_connect($host,$user,$pass);
print ("Connected successfully");

mysql_select_db("wwwoverprousersru_joomla1",$db);
$result = mysql_query("select sum (cb_balans) from jos_comprofiler",$db);
while ($summa= mysql_fetch_row($result)){

print "$summa[0]";

}

?>

ЧЕ я делаю нитак?
« Последнее редактирование: 10.01.2008, 22:26:02 от cyberbattler »
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Если все это делается внутри joomla, то зачем так радикально? Есть же глобальная переменная $database, отвечающая за работу с БД...
FAQ смотрел? Версию указал?
*

cyberbattler

  • Осваиваюсь на форуме
  • 30
  • 0 / 0
А как с ней работать? как вывести сумму этих значений куда-нибудь в джумла?
SELECT SUM( cb_balans )
FROM jos_comprofiler
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?

	
$query "SELECT SUM( cb_balans ) FROM jos_comprofiler";
	
$database->setQuery$query );
	
$sum intval$database->loadResult() );
	

	
echo 
'SUMM = ' . (int)$sum;
FAQ смотрел? Версию указал?
*

cyberbattler

  • Осваиваюсь на форуме
  • 30
  • 0 / 0
СПАСИБО БОЛЬШОЕ!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться