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

max_max

  • Осваиваюсь на форуме
  • 40
  • 0 / 0
Здравствуйте. Мне необходимо исключить неопубликованные товары из выгрузки товаров в ЯндексМаркет. На данный момент, все неопубликованные товары попадают в выгрузку (в файл YML). В файле yml.php есть подключение через запрос. Выглядит данное подключение так:

Код
if ($products = mysqli_query($mysqli, 'SELECT a.product_id, a.`name_ru-RU`, a.product_price,  a.`description_ru-RU`, a.image, a.`alias_ru-RU`, b.category_id, c.category_parent_id, c.`short_description_ru-RU` FROM jf1yo_jshopping_products as a, jf1yo_jshopping_products_to_categories as b, jf1yo_jshopping_categories as c  WHERE b.product_id = a.product_id AND c.category_id = b.category_id')) {
    $xml .= "<offers>\n";

    while( $row = mysqli_fetch_assoc($products) ){
        // $url = SEFLink("index.php?option=com_jshopping&controller=product&task=view&category_id=".$row['category_id']."&product_id=".$row['product_id'], 1);
        if ($row[product_price] > 0){
        $xml .= "<offer id=\"".$row['product_id']."\" available=\"true\">\n";
        setlocale(LC_MONETARY, 'en_US');
        $price = money_format('%i', $row['product_price']);
        $xml .= "<price>".$price."</price>\n";
        $xml .= "<currencyId>RUR</currencyId>\n";
        $xml .= "<categoryId>".$row['category_id']."</categoryId>\n";
        $xml .= "<name>".$row['name_ru-RU']."</name>\n";   
        $xml .= "<description> \n <![CDATA[".$row['description_ru-RU']."\n ]]> \n </description>\n";
        $xml .= "<picture>http://dmk.su/components/com_jshopping/files/img_products/".$row['image']."</picture>\n";
            if ($row['short_description_ru-RU'] != "")
                if ($row['alias_ru-RU'] != "")
                $xml .= "<url>".$row['short_description_ru-RU'].'/'.$row['alias_ru-RU']."</url>\n";
                else
                $xml .= "<url>".$row['short_description_ru-RU'].'/product/view/'.$row['category_id'].'/'.$row['product_id']."</url>\n";
            else {
                $parentdisc = mysqli_query($mysqli, 'SELECT `short_description_ru-RU` FROM jf1yo_jshopping_categories WHERE category_id = '.$row["category_parent_id"]);
                $discrow = mysqli_fetch_assoc($parentdisc);
                $parental = mysqli_query($mysqli, 'SELECT `alias_ru-RU` FROM jf1yo_jshopping_categories WHERE category_id = '.$row["category_id"]);
                $aliasrow = mysqli_fetch_assoc($aliasrow);
                // $xml .= "<test>".var_dump('SELECT `short_description_ru-RU` FROM jf1yo_jshopping_categories WHERE category_id = '.$row["category_parent_id"])."----".var_dump($discrow)."</test>\n\n\n\n";
                if ($row['alias_ru-RU'] != "")
                $xml .= "<url>".$discrow['short_description_ru-RU'].'/'.$aliasrow['alias_ru-RU'].'/'.$row['alias_ru-RU']."</url>\n";
                else
                 $xml .= "<url>".$discrow['short_description_ru-RU'].'/'.$aliasrow['alias_ru-RU'].'/'.$row['product_id']."</url>\n";   
               
            }
        $xml .= "</offer>\n";
        }
    }
    $xml .= "</offers>\n";

    mysqli_free_result($products);
}

mysqli_close($mysqli);

$xml .= "</shop>\n</yml_catalog>";

echo $xml;

Нужно прописать условие в этом запросе, которое не позволит выводит неопубликованные товары. Но я не знаю как обратиться к этим товарам со статусом "Неопубликованные".

Используйется JoomShopping.

Спасибо за помощь!
« Последнее редактирование: 25.05.2021, 12:29:22 от max_max »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Атрибуты полей при оформлении заказа в JoomShopping

Автор goga_pgasovav

Ответов: 1
Просмотров: 444
Последний ответ 12.08.2025, 11:21:29
от kit2m2
Конфликт js шаблонов JoomShaper helix3 J5 с JoomShopping 5

Автор heartlink

Ответов: 6
Просмотров: 1198
Последний ответ 22.07.2025, 12:40:12
от heartlink
Модуль карусели товаров JoomShopping на Swiper.js для Joomla

Автор sergeytolkachyov

Ответов: 2
Просмотров: 1835
Последний ответ 04.07.2025, 10:30:36
от sergeytolkachyov
[Решено] Сбросить счётчик ID товаров JoomShopping

Автор goga_pgasovav

Ответов: 3
Просмотров: 1182
Последний ответ 13.02.2025, 00:11:20
от goga_pgasovav
WT On fly image handler изображения товара JoomShopping в webp на лету

Автор sergeytolkachyov

Ответов: 13
Просмотров: 4051
Последний ответ 29.01.2025, 20:38:38
от sergeytolkachyov