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

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
Параметры модуля
« : 17.11.2015, 10:05:30 »
Здравствуйте, в модуле ест параметр count- выводит количество записей. Этот модуль используется на главной в двух позициях. Но в обоих позициях выводится одинаковое количество.
Параметры модуля получаю
Код
$module = JModuleHelper::getModule('mod_last');
        $params = new JRegistry($module->params);
        $count = $params->get('count');
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Параметры модуля
« Ответ #1 : 17.11.2015, 10:19:12 »
Но в обоих позициях выводится одинаковое количество.

А чего ты ожидал? Что будет выводиться везде по разному...

Если выводишь это в самом модуле, то этот код там не надо...
Просто выводи...
Код
        echo $params->get('count');
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
Re: Параметры модуля
« Ответ #2 : 17.11.2015, 11:23:11 »
Этот код у меня в helper'e модуля
Код
$module = JModuleHelper::getModule('mod_last');
        $params = new JRegistry($module->params);
        $count = $params->get('count');
если я напишу просто
Код
        $count = $params->get('count');
то выдает ошибку 500
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Параметры модуля
« Ответ #3 : 17.11.2015, 11:50:16 »
если я напишу просто
Код
        $count = $params->get('count');
то выдает ошибку 500

Тогда сделай вот так...

Это у нас к примеру будет helper.php
Код
public static function getPrimerFunction(&$params)
{
return $params->get('count');
}

Классу него будет - modPrimerHelper

В файле mod_name.php выводим...
Код
echo modPrimerHelper::getPrimerFunction($params);
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
Re: Параметры модуля
« Ответ #4 : 17.11.2015, 14:31:38 »
КОд хелпера
Код
        $module = JModuleHelper::getModule('mod_lastprofiles');
        $params = new JRegistry($module->params);
        $count = $params->get('count');
        
        if ($count!="")
        {
          $col=" LIMIT 0,".$count;  
        }
        else
        {
          $col="";  
        }    
        
$query = "SELECT * FROM  #__users  ".$col;
$db->setQuery($query);
$last = $db->loadObjectList();
везде выводи количество юзеров столько сколько указано в первом опубликованном модуле, таких модулей два и у них разное количество выводить надо, если убрать первые две строки то выдает ошибку 500
Код
$module = JModuleHelper::getModule('mod_lastprofiles');
        $params = new JRegistry($module->params);
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Параметры модуля
« Ответ #5 : 17.11.2015, 15:59:33 »
если убрать первые две строки то выдает ошибку 500
Код
$module = JModuleHelper::getModule('mod_lastprofiles');
        $params = new JRegistry($module->params);

Тогда значение
Код
$count = $params->get('count');

Отправляй в метод хелпера...


Сделай вот так... Файл helper.php
Код
public static function allUserCount($count)
{
if ($count!="")
        {
          $col=" LIMIT 0,".$count; 
        }
        else
        {
          $col=""; 
        }   
       
    $query = "SELECT * FROM  #__users  ".$count;
    $db->setQuery($query);
    $last = $db->loadObjectList();

return $last;
}
где, переменная $count - уже будет содержать значение параметра count

Выполняй метод таким образом...
Код
modPrimerHelper::allUserCount($params->get('count'));(
Этот код надо указать в файле mod_name.php
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Параметры модуля
« Ответ #6 : 17.11.2015, 16:26:04 »
$module = JModuleHelper::getModule('mod_last'); получит первый модуль с этим названием, а не все!
Перебирайте в позиции, или берите по тайтлу модуль!
$module = JModuleHelper::getModule('mod_last', 'тут Title модуля что вы написал в админке');
тогда вы можете взять два разных модуля с разными именами (если они с разными именами)

Если имя одно то получайте по модульной позиции:

Код: php
function getModuleParams( $position, $type )
{
$modules = JModuleHelper::getModules( $position );
foreach ( $modules as $module ) {
if ( $module->module === $type ) {
return new JRegistry( $module->params );
}
}
}
$params1 = getModuleParams( 'тут имя первой позиции модуля', 'mod_last' );
$params2 = getModuleParams( 'тут имя второй позиции модуля', 'mod_last' );
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
Re: Параметры модуля
« Ответ #7 : 17.11.2015, 19:55:10 »
Тогда значение
Код
$count = $params->get('count');

Отправляй в метод хелпера...


Сделай вот так... Файл helper.php
Код
public static function allUserCount($count)
{
if ($count!="")
        {
          $col=" LIMIT 0,".$count; 
        }
        else
        {
          $col=""; 
        }   
       
    $query = "SELECT * FROM  #__users  ".$count;
    $db->setQuery($query);
    $last = $db->loadObjectList();

return $last;
}
где, переменная $count - уже будет содержать значение параметра count

Выполняй метод таким образом...
Код
modPrimerHelper::allUserCount($params->get('count'));(
Этот код надо указать в файле mod_name.php
Спасибо помогло +
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывести дату завершения публикации модуля publish_down

Автор theflame

Ответов: 7
Просмотров: 4699
Последний ответ 06.10.2017, 12:46:30
от NewUsers
вывести данные из модуля с формой Subform form field type

Автор Glog

Ответов: 19
Просмотров: 2247
Последний ответ 22.06.2017, 13:32:07
от Glog
Ошибка при попытке получить параметры активного пункта меню в контроллере компонента

Автор Inoken

Ответов: 10
Просмотров: 1893
Последний ответ 19.06.2017, 14:29:22
от dmitry_stas
Зависимость модуля от компонента и страницы

Автор Тренд

Ответов: 34
Просмотров: 3106
Последний ответ 16.06.2017, 19:48:39
от dmitry_stas
Ошибка при создании модуля

Автор White_Tiger

Ответов: 7
Просмотров: 2033
Последний ответ 01.02.2016, 14:33:46
от robert