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

x1

  • Давно я тут
  • 635
  • 15 / 0
  • Linux — это Windows для бытовой техники
Стандартный фильтр Jshopping Filters
Как  узнать, что фильтр включен, что товары отфильтрованы? 
Может есть глобальная переменная?
*

IToro82

  • Захожу иногда
  • 354
  • 13 / 1
Смотрите по адресной строке
*

x1

  • Давно я тут
  • 635
  • 15 / 0
  • Linux — это Windows для бытовой техники
мотрите по адресной строке
Включено  SEO, в адресной строке что с фильтром, что без только алиас  категории.
*

v42bis

  • Захожу иногда
  • 133
  • 13 / 1
Как вариант
Код
/*
см. код шаблона default.php модуля mod_jshopping_filters
передаются post-запросом:
manufacturers[] - производители
categorys[] - категории
fprice_from - цена от
fprice_to - цена до
extra_fields[][] - характеристики
*/

// https://docs.joomla.org/Retrieving_request_data_using_JInput
use Joomla\CMS\Factory;
$app = Factory::getApplication();
$input = $app->input;
if ($input->exists('fprice_from')) {
   // отсортировано по минимальной цене
}
*

x1

  • Давно я тут
  • 635
  • 15 / 0
  • Linux — это Windows для бытовой техники
Как вариант
Я уже пробовал. Суть проблемы вырисовывается в том, что массив с отфильтрованными товарами в этом фильтре  и массив со всеми товарами без фильтра невозможно идентифицировать. Нет какого то идентификатора, например глобальной переменной. Массивы отличаются только к-вом товаров.
*

nevigen

  • Moderator
  • 10451
  • 863 / 25
  • http://n*****n.com
ну так введите переменную признака  в обработке фильтром.
или еще проще добавляйте фильтру просто класс если произведена фильтрация и снимайте его по кнопке сброс.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

x1

  • Давно я тут
  • 635
  • 15 / 0
  • Linux — это Windows для бытовой техники
см. код шаблона default.php модуля mod_jshopping_filters
передаются post-запросом:
То ли я туплю, но ничего не выходит, пост запросом не передается.
Попробую уточнить проблему мне надо каким то образом на странице карточки товара получить информауию о том включен фильтр или нет.
ну так введите переменную признака  в обработке фильтром.
Блин, ну подскажите, как при применении/включении фильтра добавить class "filter_on" в тег body?
« Последнее редактирование: 17.05.2021, 20:30:07 от x1 »
*

nevigen

  • Moderator
  • 10451
  • 863 / 25
  • http://n*****n.com
Блин, ну подскажите, как при применении/включении фильтра добавить class "filter_on" в тег body?
хз. я не пользую стандартный фильтр. надо разбираться.
и почему боди, а не фильтру ?
гугл не помогает ?
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

x1

  • Давно я тут
  • 635
  • 15 / 0
  • Linux — это Windows для бытовой техники
гугл не помогает ?
Дело не в том, как))) с помощью js добавить, а впрос в какой файл внести выполнение этого кода. Насчет body м - ожно добавить "filter_off" и к классу "jshop_list_product".
Немножко перемудрили разработчики, можно и попроще было все организовать - не могу я разобраться, что и откуда вызывается.
*

nevigen

  • Moderator
  • 10451
  • 863 / 25
  • http://n*****n.com
Дело не в том, как))) с помощью js добавить, а вопрос в какой файл внести выполнение этого кода. Насчет body м - ожно добавить "filter_off" и к классу "jshop_list_product".
Немножко перемудрили разработчики, можно и попроще было все организовать - не могу я разобраться, что и откуда вызывается.

проще некуда :)

в шаблоне модуля фильтра вносить, по нажатию на кнопки.
я так думаю.
выбрать/показать -  аддить и сброс  - ремувить.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

x1

  • Давно я тут
  • 635
  • 15 / 0
  • Linux — это Windows для бытовой техники
шаблоне модуля фильтра вносить, по нажатию на кнопки.
Код
<script>
      document.getElementById('intro_btn').onclick = function() {
    document.getElementById('comjshop').classList.add('filterON');
alert("filterON");
};
</script>
Да, после нажатия кнопки фильтра, фильтр срабатывает - добавляется класс filterON к к #comjshop. Но дальше то страница обновляется и добавленный класс исчезает! Т.е. класс должен добавляться после применения фильтра, но перед выводом страницы на экран - как это я себе понимаю.
« Последнее редактирование: 18.05.2021, 11:16:35 от x1 »
*

sivers

  • Живу я здесь
  • 2591
  • 360 / 0
Может есть глобальная переменная?
Есть такая. Имя ей - $_REQUEST. Проверяйте ее содержимое и ставьте условие. В нее попадают и гет-, и пост- параметры. И те, которые сефом скрыты - тоже.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Но дальше то страница обновляется и добавленный класс исчезает!
LocalStorage в помощь
п.с.
Хотя можно и в сессии писать .
Код
		$session = JFactory::getSession();
if(empty($session->get('test'))) {
$session->set('test', 'test session' );
}
« Последнее редактирование: 18.05.2021, 14:41:17 от draff »
*

x1

  • Давно я тут
  • 635
  • 15 / 0
  • Linux — это Windows для бытовой техники
Есть такая. Имя ей - $_REQUEST
Переменная не выводит нужной информации.

LocalStorage в помощь
В итоге воспользовался этим советом. Вобщем- без использования сессий не обошлось. Это немного не то, что я хотел.
Всем спасибо, тему можно закрыть.

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

JShopping 5: отображение всех подкатегорий

Автор Napst3r

Ответов: 2
Просмотров: 953
Последний ответ 10.01.2025, 14:54:21
от Napst3r
WT JShopping Cart - модуль Bootstrap 5 корзины для JoomShopping 5 и Joomla 4

Автор sergeytolkachyov

Ответов: 7
Просмотров: 4162
Последний ответ 15.12.2024, 09:34:09
от kit2m2
JoomShopping как вывести фильтр в наличии

Автор thevaca

Ответов: 4
Просмотров: 1505
Последний ответ 15.08.2024, 17:41:20
от thevaca
Фильтр товаров для JoomShopping 5

Автор Lemonez

Ответов: 14
Просмотров: 2479
Последний ответ 25.04.2024, 14:11:25
от dron
WT JShopping cart save плагин брошенных корзин пользователей. JoomShopping 5.3+

Автор sergeytolkachyov

Ответов: 4
Просмотров: 1467
Последний ответ 01.03.2024, 12:29:46
от kit2m2