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

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
сделал лэйаут обещанный по производителям. разместил в отдельной теме а то тут уже пихать некуда: http://joomlaforum.ru/index.php/topic,130356.0.html
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Aleks_El_Dia

  • Живу я здесь
  • 3671
  • 353 / 0
  • AEDStudio Joomla! Direction
сокращение? так чтоли - mod_dnk_vm_categories ))
Вполне очень даже ничего)))
Спам придумали боги в отместку за наши молитвы (с) Рома Воронежский
На молоко: Z369038872422 || R210017695494 || U247040729215 || ЯД 410011288250383
Мигрирую сайты, переношу расширения J!1.0->J!1.5->J!2.5. Более 50 успешных миграций.
*

Byakuya

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Добрый вечер.

Спасибо за модуль. Есть пара вопросов:
1) В начале темы (на превой странице) megaman спрашивал по поводу раскрытия меню до определенного уровня. У меня сейчас есть точно такая же задача. Сделал всё, как Вы писали: поставил в настройках "Конечный уровень = 2" и "Свернуть меню = нет". Но при таких настройках последняя (третья по вложенности) категория вообще не отображается. Что я делаю не так?
2) При выборе шаблона mooexplorer - модуль отображается нормально, но при нажатии на какую-либо категорию (либо на + для просмотра вложенных категорий) появляется ошибка "Error loading: <выбранная категория>" и дерево при этом не раскрывается.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Byakuya, в начальных версиях так можно было сделать. теперь к сожалению не получится. Сделайте например меню, выпадающее только со второго уровня(на css). Или испоьзуйте аккордион.

PS.Хотя если очень постараться, можно всетаки сделать (нужно ковырять default.php)
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Byakuya

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Byakuya, в начальных версиях так можно было сделать. теперь к сожалению не получится. Сделайте например меню, выпадающее только со второго уровня(на css). Или испоьзуйте аккордион.

PS.Хотя если очень постараться, можно всетаки сделать (нужно ковырять default.php)

Так я это в аккордионе и пытался сделать, мне вывод деревом не особо принципиален. Через аккордион тоже не получается.
А у Вас старой версии модуля не осталось? Или он не очень хорошо работает?
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
ну так прям аккордион юзать смысла мало. сделайте просто выпадение последнего уровня категорий на CSS. Или в accordion_assets замените
$$($('{$params->get('tag_id')}'), $('{$params->get('tag_id')}').getElements('ul'))
на
$$($('{$params->get('tag_id')}').getElements('ul'))

тогда первый уровень не будет аккордиониться.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Byakuya, и все у кого подобная ошибка с mooexplorer. В файле mooexplorer_assets.php нужно поменять index.html на index.php
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Byakuya

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
О, да! Всё заработало. Спасибо тебе, добрый человек!
*

Roberta

  • Захожу иногда
  • 182
  • 0 / 0
Спасибо за модуль.
Скачала, установила.

Подскажите, как сделать, чтобы в меню название категории задавалось отдельным стилем, например, было чуть крупнее.
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
*

Roberta

  • Захожу иногда
  • 182
  • 0 / 0
спасибо, попробую.

Еще вопрос . на сайте установлен флеш. И при работающем флеше не работает аккардион. и меню не цепляет CSS стиль
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Еще вопрос . на сайте установлен флеш. И при работающем флеше не работает аккардион. и меню не цепляет CSS стиль

странная зависимость...давайте ссылку. быть может у вас ошибка в ваших скриптах?
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

takes

  • Захожу иногда
  • 84
  • 0 / 0
пожалуйста опишите подробно как сделать чтобы справа меню которых не могут раскрываться была картинка open.png, а справа которых могут раскрываться была картинка open.png распишите подробно пожалуйста , очень прошу
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
и в чем отличие? )) О каком лэйауте речь ? аккордион?
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

takes

  • Захожу иногда
  • 84
  • 0 / 0
да о аккординг идёт речь, в смысле в чём отличие?
пользователь будет видеть какие раскрываются, а какие нет
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
они в любом случае увидят open.png, перечитай свой пост )))
Читай кастомизацию CSS. добавь парентам background: url(../images/open.png) no-repeat;
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

takes

  • Захожу иногда
  • 84
  • 0 / 0
у меня нечего не вышло, объясни подробно пожалуйста
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
объясняю:
.menu li.parent{
    background: url(../images/open.png) no-repeat;
}

предполагается что картинка закинута в images шаблона
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

takes

  • Захожу иногда
  • 84
  • 0 / 0
*

VadeR

  • Осваиваюсь на форуме
  • 23
  • 6 / 0
Сорри, если не совсем по теме... А у всех sef404 нормально конвертирует ссылки при установки вида dtree?
у меня вообще их не трогает :(
Если кто знает решение - просьба поделиться...
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
мм. а где вы там dtree нашли??
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

MAUS

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Подскажите пожалуйста , как сделать меню accordion закрывающемся через некоторое время после того , как мышка уйдет с объекта .
Отличный и очень нужный модуль !
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Подскажите пожалуйста , как сделать меню accordion закрывающемся через некоторое время после того , как мышка уйдет с объекта .
Отличный и очень нужный модуль !

хдето туто это обсуждалось. полистай строницы.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

MAUS

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
да уже полистал , все. Что то обсуждалось , но конкретно не нашел (
Сейчас еще посмотрю .
*

MAUS

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Прочитал еще раз , ничего подходящего в этой теме не нашел . может я не внимательный.....
Видел только в темах рядом  тебя чувак просил сделать тоже , что и я , только с другим модулем . Ты сказал , что знаешь как это сделать только со своим модулем . Больше ничего не видел . Помоги пожалуйста.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Да, действительно... может в другой теме было дело... или в личку скинул файл...
Блин, не могу прикрепить файл. Вот, файл положить в html/mod_virtuemart_categories шаблона
[spoiler title=accordion_assets.php]<?php
/**
* VirtueMart Categories Module
* NOTE: THIS MODULE REQUIRES THE PHPSHOP COMPONENT!
*
* @copyright (C) 2010 JFactory Project
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* This extention is Free Software.
*/

// no direct access
defined('_JEXEC') or die('Restricted access');

$script = "
window.addEvent('domready', function(){

   $$($('{$params->get('tag_id')}'), $('{$params->get('tag_id')}').getChildren().filterByTag('ul')).each(function(el){
         accParentItems = el.getChildren().filterByClass('parent');
         accTogglers = [];
         accElements = [];
         accParentItems.each(function(element, index){
            accTogglers.push(new Element('span').inject(element));
            accElements.push(element.getChildren().filterByTag('ul')[0]);
            element.index = index;
            element.getChildren().filterByTag('a')[0].addEvent('mouseover', function(){
               if (this.getNext().offsetHeight == 0) {
                  this.parentNode.parentNode.Accordion.options.wait = false;
                  this.parentNode.parentNode.Accordion.display($(this.parentNode).index);
               }
            });
            element.addEvent('mouseleave', function(){
               if (element.getChildren().filterByTag('ul')[0].offsetHeight != 0) {
                  element.parentNode.Accordion.display($(this).index);
               }
            });
            
         });
         if ( accParentItems.length > 0 ){
               el.Accordion = new Accordion(accTogglers, accElements, {
                        opacity: false,
                        alwaysHide: true,
                        show: $$(accParentItems).indexOf($$(accParentItems).filterByClass('active')[0]),
                        duration: 600,
                        transition: Fx.Transitions.Quart.easeOut,
                        onActive: function(toggler, element){
                              element.parentNode.parentNode.setStyle('height', 'auto');
                              element.parentNode.addClass('expanded');
                        },
                        onBackground: function(toggler, element){
                              element.parentNode.parentNode.setStyle('height', 'auto');
                              element.setStyle('height', element.offsetHeight+'px');
                              element.parentNode.removeClass('expanded');
                        }
                     }
               );
         }
   });

});
";

// require mootools
JHTML::_('behavior.mootools');

// get document
$document =& JFactory::getDocument();
$document->addScriptDeclaration($script);
[/spoiler]
Аккордион сворачивается сразу после того как уберешь мышку с него.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

MAUS

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Огромнейшее спасибо ! Вчера до 6 утра искал , очень помог !
Буду дальше работать над магазом.
*

MAUS

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Почему сразу все категории открываются ? В оригинале открывались только те , на которые наводишь . Сейчас сам попробую решить , но если есть решение , то скинь пожалуйста.
*

MAUS

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Все решил , в старый код mouseleave подставил. Спасибо , за помощь !
*

MAUS

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Не подскажешь , как задержку на умирание мышки поставить , чтобы не сразу меню закрывалось.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

IceVmCart - новый бесплатный модуль корзины для VirtueMart

Автор Grig2009

Ответов: 105
Просмотров: 53917
Последний ответ 05.02.2017, 11:44:02
от Super_Panda
Модуль недавно просмотренные товары для VirtueMart 1.1.X

Автор aleks_yug

Ответов: 97
Просмотров: 28022
Последний ответ 25.10.2016, 15:03:07
от Igoritaly
Модуль Cherry Picker for VirtueMart

Автор flintstone

Ответов: 42
Просмотров: 26623
Последний ответ 04.01.2016, 21:25:50
от gleb22
Добавить модуль в товар

Автор Tokyo

Ответов: 2
Просмотров: 2886
Последний ответ 11.05.2015, 20:43:32
от tierex
Модуль VirtueMart для фильтра товаров по категориям!

Автор maxmur

Ответов: 104
Просмотров: 52585
Последний ответ 08.08.2014, 11:47:37
от Хусен