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

VetaJI

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Аркадий, еще не решен глюк с исчезновением селектов при выборе параметров снизу вверх ?? http://joomlaforum.ru/index.php/topic,115793.msg664276.html#msg664276
« Последнее редактирование: 04.05.2011, 10:03:02 от VetaJI »
*

cheiz

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Да, понял, готового решения нет, буду думать. Возможно придется заблокировать верхние характеристики.

Действительно, актуальная тема, при нулевой выборке, и несоотвецтвию пропадают селекты, блокировать верхние характеристики или те характеристики в которых нет параметров, просто скидывать на первое пустое значение ""
*

sanekk

  • Захожу иногда
  • 66
  • 0 / 0
Arkadiy у меня модуль работает нормально, но при переходе в раздел при выборе типов параметров он не обновляет информацию о количестве товаров в выборке, которые подходят по данным параметрам, что не есть гуд, хоть модуль и работает.
Подскажите пожалуйста в чем проблема. заранее спасибо.
www.stovatt.ru

у тебя где-то пропущен префикс mod_, по этому функция не определена.

Кто сталкивался с этой проблемой? Подскажите как ее решить? Где надо подкрутить?
*

farik46

  • Осваиваюсь на форуме
  • 12
  • 1 / 0
а возможно ли сделать чтобы после выбора типа товара появлялся выпадающий список с возможностью выбора характеристики товара и только потом выпадающий список значений этой характеристики?
*

_barmaley

  • Новичок
  • 2
  • 0 / 0
Установил модуль, не работает - не выдает результаты поиска.
<div id="main_search"> сделал.

Проверил фаер багом. Находит ошибки.
1) когда в поиске выбираю значение по которому искать из выпадающего списка:
typeChange is not defined
onchange()1 (строка 2)
event = change

2) при нажатии кнопки поиск выдает:
mod_loadProduct is not defined
onclick()2 (строка 2)
event = click clientX=226, clientY=483


Может быть я где-то натупил?

у меня та же проблема, подскажите пожалуйста как её решить
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
1. должен быть mod_typeChange - префикс где-то забыт.
2. не подгружен скрипт модуля.
*

_barmaley

  • Новичок
  • 2
  • 0 / 0
1. должен быть mod_typeChange - префикс где-то забыт.
2. не подгружен скрипт модуля.
ух ты какой быстрый ответ!
1. скрипт подгружен
2. куда копать, где прописать префикс? /* префикс прописал, теперь модуль белеет и при нажатии на поиск ничего не происходит. ошибок нет
большое спасибо!
-----
допилил всетаки :) проблема была в том, что некорректно определялся путь к сайту
в файле mod_universal_search.js правим
var url = 'http://'+location.hostname + '/Путь к папке где лежит Joomla ';
и я заменил все index2.php на index.php

еще раз спасибо!.
хотелось бы посмотреть платную версию. возможна ли оплата через PayPal?
« Последнее редактирование: 26.05.2011, 14:35:25 от _barmaley »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
1. Да, если Joomla не в корне, то поиск болеет.
2. Эти вопросы в соответствующую тему.
*

biohan

  • Захожу иногда
  • 56
  • 0 / 0
Notice: Undefined index: viev_category in site\modules\mod_vm_universal_search_free\mod_vm_universal_search_free.php on line 51



Код
 <?php $uniSearch->list_category($cid, "catid[]", $conf['viev_category'], 'mod_'); ?>
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
попробуй $conf['viev_category'] заменить на две кавычки
*

biohan

  • Захожу иногда
  • 56
  • 0 / 0
не работает =\
*

biohan

  • Захожу иногда
  • 56
  • 0 / 0
тут тоже самое
Код
<?php $uniSearch->list_type($types, $product_type_ids, $conf['viev_type'], 'mod_'); ?>
*

biohan

  • Захожу иногда
  • 56
  • 0 / 0
Notice: Undefined variable: param_id in site\components\com_vm_ext_search_free\files\unisearch.php on line 406

Код
 $q = "SELECT distinct `product_id` FROM #__{vm}_product_type_" . $param_id . " ";
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
*

biohan

  • Захожу иногда
  • 56
  • 0 / 0
попробуй $conf['viev_category'] заменить на две кавычки

заменил на две кавычки -> $conf["viev_category"]
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
ну так тот нотис должен устраниться, все остальные так-же пробуй (только viev_).
*

biohan

  • Захожу иногда
  • 56
  • 0 / 0
ну так тот нотис должен устраниться, все остальные так-же пробуй (только viev_).

нотис не уходит.ставил 2 кавычки
*

biohan

  • Захожу иногда
  • 56
  • 0 / 0
вывел компонент в меню,такая же ошибка
Код
Notice: Undefined index: viev_category in site\components\com_vm_ext_search_free\vm_ext_search_free.php on line 66

66 cтрока =>   
Код
<?php $uniSearch->list_category($cid, "catid[]", $conf['viev_category']); ?>

ставил 2 кавычки-не помогает
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Код: php
<?php $uniSearch->list_category($cid, "catid[]", ''); ?>
должно было получиться.
*

biohan

  • Захожу иногда
  • 56
  • 0 / 0
Получилось...
а что делать вот с этим
Код
Notice: Undefined variable: param_id in site\components\com_vm_ext_search_free\files\unisearch.php on line 406

406 строка

Код
   $q = "SELECT distinct `product_id` FROM #__{vm}_product_type_" . $param_id . " ";
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
А вот $param_id должен быть. Либо прерывать скрипт.
*

biohan

  • Захожу иногда
  • 56
  • 0 / 0
так что делать?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Вникать в код, у меня этот модуль нигде не стоит.
*

Al195

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

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Если теоретически, то помогу, практически не смогу, нет установленного модуля.
*

Al195

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Очень хорошо, готов следовать Вашим теоретическим наставлениям, и внедрять в код все рекомендуемые инструкции.
« Последнее редактирование: 02.06.2011, 22:22:15 от Al195 »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Во фронтальной части компонента есть файл vm_ext_search_helper.php, в запрос в строку
Код
$q = "SELECT #__{vm}_product.product_id, #__{vm}_product.product_parent_id, #__{vm}_product.product_thumb_image, ";
вставить столбец производителя, потом вывести его через
Код
<?php echo $db->f("столбец производителя")?>
.
*

Al195

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
В таблице товара производитель не цепляется, видимо надо его тянуть связью из таблицы производителей написал запрос но видимо где-то ошибся или не могу его подключить проверьте пожалуйста
Код
$q = "SELECT `#__{vm}_manufacturer`.`mf_name`
FROM `#__{vm}_product` LEFT JOIN (`#__{vm}_product_mf_xref` LEFT JOIN `#__{vm}_manufacturer` ON `#__{vm}_product_mf_xref`.`manufacturer_id` = `#__{vm}_manufacturer`.`manufacturer_id`) ON `#__{vm}_product`.`product_id` = `#__{vm}_product_mf_xref`.`product_id`
WHERE (((`#__{vm}_product`.`product_id`)='ид товара'))";
« Последнее редактирование: 03.06.2011, 16:28:07 от Al195 »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Оператор ON показывает связь таблиц и применяется один раз на джойн, все доп. условия выводить в WHERE. Джойны не берутся в скобки и т.п. Тебе лучше посмотреть рабочий запрос с джойнами и сделать наподобие.
*

Al195

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Да пожалуй, так и есть вод подглянул код из модуля производителей mod_virtuemart_manufacturers.php
Код
$query  = "SELECT DISTINCT m.manufacturer_id, m.mf_name
FROM #__{vm}_manufacturer m
LEFT JOIN #__{vm}_product_mf_xref mx ON mx.manufacturer_id = m.manufacturer_id
LEFT JOIN #__{vm}_product p ON p.product_id = mx.product_id
LEFT JOIN #__{vm}_product_category_xref cx ON cx.product_id = p.product_id
WHERE cx.category_id =".(int)$category_id;
$query .= " ORDER BY m.mf_name ASC";

$query_all  = "SELECT m.manufacturer_id,m.mf_name FROM #__{vm}_manufacturer m ";
$query_all .= "ORDER BY m.mf_name ASC";

можно ли его под  его под id продукта переделать
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

VirtueMart - SMS уведомления о сделаном заказе.

Автор bork

Ответов: 42
Просмотров: 23289
Последний ответ 26.07.2021, 22:11:25
от Oleg91
Отчеты и статистика для VirtueMart

Автор 4kict

Ответов: 25
Просмотров: 10376
Последний ответ 14.01.2021, 00:09:53
от gartes
IceVmCart - новый бесплатный модуль корзины для VirtueMart

Автор Grig2009

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

Автор aleks_yug

Ответов: 97
Просмотров: 28011
Последний ответ 25.10.2016, 15:03:07
от Igoritaly
Поиск для магазина автозапчастей как на Exist.ru!

Автор zzaj

Ответов: 21
Просмотров: 8831
Последний ответ 11.05.2016, 13:50:02
от Pahom72