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

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
)) Чем дальше тем страшнее
Модуль качал со страницы FAQ JoomShopping...
Вот теперь я узнал что Вы используете и что хотите получить.

Открываем файл plugins\jshoppingproducts\ultra_filters\ultra_filters.php.
Находим сразу строчку
Код
require_once(JPATH_SITE.DS.'components'.DS.'com_jshopping'.DS."lib".DS."functions.php");
После нее добавляем:
Код
		if(isset($filters["labels"]) && is_array($filters["labels"]))
{
$new_query = "";
foreach($filters["labels"] as $label)
{
$new_query .= " OR FIND_IN_SET(".$label.", prod.label_multiselect)";
}
$labels = implode(",", $filters["labels"]);
$adv_query = str_replace("AND prod.label_id in (".$labels.")", "", $adv_query);
$new_query = "AND (prod.label_id in (".$labels.") ".$new_query.")";
$adv_query .= $new_query;
}
Теперь на словах:
  • Формируем дополнительный запрос поиска каждой запрошенной метки во множестве значений поля label_multiselect.
  • Объединяем через запятую все запрошенные значения для поиска уже существующей части запроса
  • Удаляем часть существующего запроса поиска метки, чтобы потом объединить с дополнительным запросом в одни скобки
  • Объединяем две части запроса в одни скобки
  • Добавляем это всё к общему запросу
Вот таким нехитрым способом у меня работают мои мультиметки. (Не просите у меня код, он был написан под ключ еще до того как...)
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ХайВей

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
Хорошее расширение
+ автору как я понял это dmitry_stas

А можете сделать не по дате добавления, а по количеству последних добавленных товаров.
*

ХайВей

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
Может кто подскажет кодом как изменить дату на количество последних добавленных товаров.
*

darknefrit

  • Захожу иногда
  • 61
  • 1 / 0
  • Мечтай так как будто будешь жить вечно
*

Cerber

  • Захожу иногда
  • 266
  • 34 / 0
  • Богиня Иштар и ее пес Пи..ц
А можете сделать не по дате добавления, а по количеству последних добавленных товаров.
+1 присоединяюсь


Как в js4 заставить работать плагин http://nevigen
darknefrit зайдите обратно на сайт и посмотрите последние 3-и поста на вкладке "отзывы", там написано как адоптировать под JS4


.... а для тех которые имеют старую цену метку "Сейл".
Мы уже делали такой плагин.. но он только для отображения, полноценно метки не назначаются.
Nevigen если делали такой плагин автометки  Old prices можете поделиться, а то такого нигде нет.
*

darknefrit

  • Захожу иногда
  • 61
  • 1 / 0
  • Мечтай так как будто будешь жить вечно
Я не понял что заменять надо...

+1 присоединяюсь

darknefrit зайдите обратно на сайт и посмотрите последние 3-и поста на вкладке "отзывы", там написано как адоптировать под JS4

Nevigen если делали такой плагин автометки  Old prices можете поделиться, а то такого нигде нет.

*

ХайВей

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
и тишина и мертвые с косами стоят
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
ХайВей, может я что-то не понимаю, но каков должен быть принцип отбора товаров по количеству?
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ХайВей

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
Ну допустим поставили 5 и лейбл вешается на последние 5 добавленных товаров в магазин
У меня просто товар сезонный и при нынешней его работе придется каждый раз лазить в настройки
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Ну допустим поставили 5 и лейбл вешается на последние 5 добавленных товаров в магазин
У меня просто товар сезонный и при нынешней его работе придется каждый раз лазить в настройки
Это не ответ. Это описание причины почему Вам надо это. А что такое это до сих пор не ясно.
Сезонность товара ничего не объясняет.
Ну вот добавили пять новых товаров. Ну добавилась к ним метка и что? Нужно чтобы не добавлялась? Нужно чтобы добавлялась только тем у кого больше 5 штук товара в количестве было добавлено?
Опишите что именно Вы хотите от модуля. Как пример опишу мини-ТЗ другого модуля:
 - Модуль должен выводить товары имеющие старую цену, причем первыми в списке должны быть товары, добавленные последними.
 - А если администратор, добавит старую цену товару, который был добавлен самым первым?
 - Тогда сортировку надо сделать не по дате добавления, а по дате редактирования товара.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ХайВей

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
Попробую:
Плагин должен присваивать метки подобно существующему (auto label) последним созданным товарам
-В настройках можно указать количество товаров
-Эта настройка задает количество товаров на которое будет вешаться лейбл
то есть если задать количество 5 товаров, то лейбл вешается только на 5-ть последних добавленных товаров
-При добавлении новых товаров лейблы перевешиваются со старых на новые так чтобы всегда оставалось 5 последних добавленных товаров с лейблом

Уфф так пойдёт
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Да, пойдет.
Встречные вопросы:
В категории 4 товара. Если идти по методу существующего плагина, то всем 4-м товарам будет назначаться метка. Так ведь не должно быть?
Если в категории 60 товаров, то метка будет назначена последним пяти и их не будет видно на первой странице, так как сортировка по умолчанию идет по ID товара. Надо чтобы они были первыми? Или сортировку не нужно учитывать?
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ХайВей

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
В категории 4 товара. Если идти по методу существующего плагина, то всем 4-м товарам будет назначаться метка. Так ведь не должно быть?
Почему не должно?! Это вы решаете скольким товаром поставить метки на все товары на половину или только двум.
Если в категории 60 товаров, то метка будет назначена последним пяти и их не будет видно на первой странице, так как сортировка по умолчанию идет по ID товара. Надо чтобы они были первыми? Или сортировку не нужно учитывать?
да нет сортировку не надо учитывать тем более ее может каждый сам настроить.

Дополнительно скажу что если у вас новый магазин и много товаров который вы добавили за 1-2 дня. То с помощью такой настройки (количество) вы без труда сможете повесить метки на то количество товаров которое вы хотите показать как новый
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Почему не должно?! Это вы решаете скольким товаром поставить метки на все товары на половину или только двум.
Вы меня не совсем правильно поняли. Сейчас плагин делает следующее: Берёт все товары категории в которой Вы находитесь и проверяет их дату создания. С количеством будет так: Берутся все товары категории и последним добавленным (в нужном количестве) назначается метка.
Соответственно здесь необходим другой подход. И проставлять метки "на лету" не получится. Придется принудительно назначать метки и хранить их в базе, до тех пор пока не добавится новый товар. И такой подход полностью исключает возможность назначать другие метки последним товарам
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ХайВей

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
Вот теперь я понял как Вы объяснили принцип работы и понятно в чем вся сложность

Хотелось именно: проставлять метки "на лету"
 :( Жалко но при такой работе плагина ничего не выйдет

А нельзя ли чтобы плагин опрашивал всю базу с товарами или по принципу как в модуле Module Latest products 4.0.4
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
а я вот не понял :)

проставлять метки "на лету" не получится.

а почему не получится? выбирается массив product_id для N товаров с сортировкой по дате добавления, и проверяется для каждого товара в списке товаров (либо одного товара, если мы просматриваем сам товар) вхождение его product_id в этот массив. в зависимости от этого ставится или не ставится метка.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
а я вот не понял :)

а почему не получится? выбирается массив product_id для N товаров с сортировкой по дате добавления, и проверяется для каждого товара в списке товаров (либо одного товара, если мы просматриваем сам товар) вхождение его product_id в этот массив. в зависимости от этого ставится или не ставится метка.
Ну да, плохо подумал и поспешил с выводами.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Попробуйте эту версию плагина (во вложении).
Установка через Joomla.
Поддержка версии ЖШ 4+
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ХайВей

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
Просто отлично Спасибо Linfuby :D

И кстати работает по дате или по количеству, но когда выставляешь по количеству плагин замещает вручную выставленные метки
Можете сделать чтобы вручную выставленные метки оставались приоритетными

+ в репутацию ^-^
*

Cerber

  • Захожу иногда
  • 266
  • 34 / 0
  • Богиня Иштар и ее пес Пи..ц
Можете сделать чтобы вручную выставленные метки оставались приоритетными
Сделано и переписал пару строчек
<name>JoomShopping - Auto Label - (так удобней искать среди ПО JS)
<version>1.3

Если вы не против
*

ХайВей

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
Спасибо всем все работает как надо :D
*

ХайВей

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
0k v_471
« Последнее редактирование: 07.11.2014, 19:16:56 от ХайВей »
*

kunev

  • Захожу иногда
  • 118
  • 0 / 0
Подскажите, как заставить плагин отображать метку в карточке товара?, в списке всё работает. Если ставить в ручную метку - отображает(. Вроде и код метки идентичен, но почему-то не хочет отображать( Joomla 3.3.6 JS 4.7.1. очень удобная вещь, мои сайты на VirtueMart работают по такому принципу без проблем.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

В списке товаров вывести названия категорий каждого товара

Автор shop-user

Ответов: 5
Просмотров: 2866
Последний ответ 25.01.2022, 06:05:12
от kit2m2
Плагин - Инфоблок товара в списке товаров [Скачать]

Автор kit2m2

Ответов: 13
Просмотров: 3131
Последний ответ 20.10.2021, 14:51:08
от kit2m2
Автоматическая генерация кода товара (плагин)

Автор maslybs

Ответов: 8
Просмотров: 3559
Последний ответ 30.08.2021, 20:21:25
от nevigen
Таблица размеров (и т.п.) Плагин модульных позиций для атрибутов на странице товара [Скачать]

Автор kit2m2

Ответов: 39
Просмотров: 7988
Последний ответ 16.05.2021, 18:16:50
от kit2m2
AJAX пагинация товара

Автор ExJTMaster

Ответов: 10
Просмотров: 4078
Последний ответ 12.10.2020, 16:20:18
от sivers