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

Rebarun

  • Захожу иногда
  • 249
  • 1 / 2
Открытие меню
« : 30.07.2020, 19:06:20 »
Подменю открывается только если нажать на плюсик
https://prnt.sc/tra60j
Можно ли сделать чтобы подменю открывалось не только через (+) но и при нажатии на сам заголовок
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Открытие меню
« Ответ #1 : 30.07.2020, 20:59:56 »
Можно ли сделать чтобы подменю открывалось не только через (+) но и при нажатии на сам заголовок
Можно добавить скрипт:
Код
<script>
jQuery('.treeview .hitarea + a').on('click', function(){
  jQuery(this).prev().trigger('click');
  return false;
});
</script>
Будет открываться по клику, но не получиться перейти в этот родительский пункт меню. Можно сделать, чтоб при первом клике открывалось, а при втором - переходило по ссылке вместо сворачивания:
Код
<script>
jQuery('.treeview .hitarea + a').on('click', function(){
  var hitarea = jQuery(this).prev();
  if(!hitarea.hasClass('collapsable-hitarea')){
    hitarea.trigger('click');
    return false;
  }
  return true;
});
</script>
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Rebarun

  • Захожу иногда
  • 249
  • 1 / 2
Re: Открытие меню
« Ответ #2 : 30.07.2020, 21:26:50 »

Будет открываться по клику, но не получиться перейти в этот родительский пункт меню. Можно сделать, чтоб при первом клике открывалось, а при втором - переходило по ссылке вместо сворачивания:

Спасибо.
Да, второй вариант наверное более приемлемый. Надо потестить.
Только, прошу прощения, подскажите куда этот скрипт вставить ?

*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Открытие меню
« Ответ #3 : 30.07.2020, 21:31:03 »
куда этот скрипт вставить ?
Лучше в js-файл (любой), но можно и в код страницы (если меню везде выведено), например, в индексе шаблона можно так:
Код
$this->addScriptDeclaration('
jQuery(function(){
jQuery('.treeview .hitarea + a').on('click', function(){
  var hitarea = jQuery(this).prev();
  if(!hitarea.hasClass('collapsable-hitarea')){
    hitarea.trigger('click');
    return false;
  }
  return true;
});
});
');
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Rebarun

  • Захожу иногда
  • 249
  • 1 / 2
Re: Открытие меню
« Ответ #4 : 30.07.2020, 22:26:06 »
Лучше в js-файл (любой), но можно и в код страницы (если меню везде выведено), например, в индексе шаблона можно так:
Код
[/quote]
Нет так все таки фигово.
Меню один раз открывается а нижнее уже не открывается...
К сожалению не вариант.
А не поджскажите как сделать чтобы по умолчанию сразу все меню разворачивалось
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Открытие меню
« Ответ #5 : 31.07.2020, 09:39:30 »
А не поджскажите как сделать чтобы по умолчанию сразу все меню разворачивалось
Т.е., при клике на любую ссылку должны раскрыться сразу все? А при повторном клике? Или при клике по "+"? Опишите тогда целиком свою хотелку )
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Rebarun

  • Захожу иногда
  • 249
  • 1 / 2
Re: Открытие меню
« Ответ #6 : 31.07.2020, 12:41:27 »
Т.е., при клике на любую ссылку должны раскрыться сразу все? А при повторном клике? Или при клике по "+"? Опишите тогда целиком свою хотелку )
Нет все проще ( как мне кажется)
При открытии сайта сразу все меню открыто полностью, а не закрыто как сейчас
Далее все как есть в стандарте.
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Открытие меню
« Ответ #7 : 31.07.2020, 13:40:05 »
Тогда лучше вообще подправить шаблон или взять стандартное меню - без скриптов и открывалок. Ну а если не хочется ничего менять, то остается только добавить костыль, который после загрузки будет все открывать. Например, такой:
Код
jQuery(function(){
  jQuery('ul.treeview').show();
  jQuery('.hitarea').hide();
});
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Rebarun

  • Захожу иногда
  • 249
  • 1 / 2
Re: Открытие меню
« Ответ #8 : 31.07.2020, 21:27:31 »
Тогда лучше вообще подправить шаблон или взять стандартное меню - без скриптов и открывалок. Ну а если не хочется ничего менять, то остается только добавить костыль, который после загрузки будет все открывать. Например, такой:
Код
jQuery(function(){
  jQuery('ul.treeview').show();
  jQuery('.hitarea').hide();
});
Спасибо что уделяете столько времени ...
Это тоже надо добавить в любой js ?
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Re: Открытие меню
« Ответ #9 : 02.08.2020, 21:43:44 »
Это тоже надо добавить в любой js ?
Работать будет в любом, который подключен после jQuery. Лучше, конечно, в кастомном, но не уверен, что смогу доступно объяснить как его подключить.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Меню в мобильной версии

Автор Rebarun

Ответов: 1
Просмотров: 2629
Последний ответ 07.07.2021, 07:47:08
от nevigen
Мобильное меню

Автор Rebarun

Ответов: 0
Просмотров: 1141
Последний ответ 16.08.2020, 21:25:35
от Rebarun
JS4.18.4/Joomla3.9.19 меню Список товаров не видит product.php в шаблоне

Автор tigra-uki

Ответов: 11
Просмотров: 1083
Последний ответ 13.06.2020, 19:44:10
от draff
Вертикальное меню товаров для мобильной версии сворачивающийся в трей

Автор bakyt

Ответов: 17
Просмотров: 1044
Последний ответ 20.12.2019, 15:56:31
от nevigen
Заменить открытие картинки в списке товаров на переход в его карточку

Автор VladislavMar

Ответов: 11
Просмотров: 970
Последний ответ 03.08.2019, 22:45:10
от VladislavMar