Новости 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 Ответов
  • 4167 Просмотров
*

Арчик

  • Захожу иногда
  • 281
  • 32 / 0
Меню двух-уровнего типа! Модуль с менюхой выводится в позиции 'left', (jostinamenu или mainemenu - проблема таже!)
Колонка 'LEFT' фиксированной ширины, менять ее незя. Проблема в том что при переносе слов дочерних пунктов меню, на перенесенные слова не действуют не padding-left не margin-left....

Что приводит к подобному безобразию:

+главный пункт1
-  подпункт первый
подпункт второй
проблемный

-  подпункт третий

Нужно получить следующее:

+главный пункт1
-  подпункт первый
подпункт второй
    проблемный

-  подпункт третий


То ись как применить padding в отношении перенесенной строки дочернего меню?
Компьютер-это вещь для решения проблем, которых у вас не было до его появления...
*

Арчик

  • Захожу иногда
  • 281
  • 32 / 0
Блин неудобно за беспокойство но решил сам, кстати вопрос этот уже поднимался не раз (ответ ниже).....
Короче решил так :
a.sublevel:link, a.sublevel:visited {
display:block;
vertical-align: middle;
 padding-left:20px;
}


Получается что отступы не распространялись на перенесённые строки так как в свойствах CSS дочерние пункты не были проблочены!
Компьютер-это вещь для решения проблем, которых у вас не было до его появления...
*

Арчик

  • Захожу иногда
  • 281
  • 32 / 0
Тем кто столкнулся с подобной проблемой в меню прошу обратить внимание что это еще не все!
Дело в том что РОДНОЙ МОДУЛЬ 'mod_mainmenu.php' не генерит уникального класса для вывода пунктов с картинками (arrow) а обрамляет все это дело стилем который прописан в php самого модуля (руки оторвать создателю)
в следствии чего при добавлении свойства display:block; к подпунктам в файле CSS шаблона (описано верхним постом), картинки этих пунктов "сдвигаются" к верней границе каждого пункта (см. прикреп. изображение 1)
для того чтобы это исправить нужно открыть приславутый 'mod_mainmenu.php' найти в нем строки:
Код: php
                $indents = array(
                        // block prefix / item prefix / item suffix / block suffix
                        array( '<table width="100%" border="0" cellpadding="0" cellspacing="0">', '<tr align="left"><td>' , '</td></tr>', '</table>' ),
                        array( '', '<div style="padding-left: 4px">'. $img[1] , '</div>', '' ),
                        array( '', '<div style="padding-left: 8px">'. $img[2] , '</div>', '' ),
                        array( '', '<div style="padding-left: 12px">'. $img[3] , '</div>', '' ),
                        array( '', '<div style="padding-left: 16px">'. $img[4] , '</div>', '' ),
                        array( '', '<div style="padding-left: 20px">'. $img[5] , '</div>', '' ),
                        array( '', '<div style="padding-left: 24px">'. $img[6] , '</div>', '' ),
                );
и заменить на :
Код: php
                $indents = array(
                        // block prefix / item prefix / item suffix / block suffix
                        array( '<table width="100%" border="0" cellpadding="0" cellspacing="0">', '<tr align="left"><td>' , '</td></tr>', '</table>' ),
                        array( '', '<div id="menu1_img" style="padding-left: 4px">'. $img[1] , '</div>', '' ),
                        array( '', '<div id="menu2_img" style="padding-left: 8px">'. $img[2] , '</div>', '' ),
                        array( '', '<div id="menu3_img" style="padding-left: 12px">'. $img[3] , '</div>', '' ),
                        array( '', '<div id="menu4_img" style="padding-left: 16px">'. $img[4] , '</div>', '' ),
                        array( '', '<div id="menu5_img" style="padding-left: 20px">'. $img[5] , '</div>', '' ),
                        array( '', '<div id="menu6_img" style="padding-left: 24px">'. $img[6] , '</div>', '' ),
                );

После чего мы сможем игратся оформлением картинок подпунктов любого уровня вложенности
т.е в CSS шаблона прописываем следующее:
Код: css
#menu1_img img{
display:block;
position:absolute;
margin-top:5px;
}
и получаем (см. прикреп. изображение 2)


Хочу отметить что в модуле mod_mljoostinamenu дело обстоит гораздо приятнее и каждый пункт из меню оформлен в свой класс!
т.е чтобы получить эффект как на втором примере нужно добавить в CSS шаблона:
Код: css
.first-level img{
display:block;
position:absolute;
margin-top:7px;
}

Всем до встречи...

[вложение удалено Администратором]
« Последнее редактирование: 24.10.2008, 19:41:03 от Арчик »
Компьютер-это вещь для решения проблем, которых у вас не было до его появления...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Кликабельность псевдоэлемента в пункте меню

Автор vasilii.pupkov

Ответов: 4
Просмотров: 3229
Последний ответ 29.12.2021, 23:15:38
от v42bis
Выпадающее меню

Автор DrShepard

Ответов: 10
Просмотров: 2898
Последний ответ 20.10.2021, 12:36:16
от DrShepard
Как закруглить края выпадающего меню?

Автор coliandra

Ответов: 1
Просмотров: 1401
Последний ответ 11.12.2020, 21:15:57
от effrit
При прокрутке страницы виджет залезает на меню

Автор coliandra

Ответов: 2
Просмотров: 1298
Последний ответ 27.11.2020, 11:33:58
от coliandra
Как убрать маркер только из одного пункта меню.

Автор kuraev64

Ответов: 2
Просмотров: 1537
Последний ответ 20.07.2020, 11:18:44
от kuraev64