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

Zelyonkin

  • Захожу иногда
  • 110
  • 0 / 0
Добрый день!
Задача такая.
Если у продукта нет meta тегов, то взять эти теги у родительской категории.
Вижу что в конечный template приходит id родительской категории, можно сделать запрос в табличку и вывести. Но не пойму где формируются meta теги в продукте? Это вроде не в /components/com_jshopping/templates/default/product/product_default.php? А где?
Помогите пожалуйста разобраться.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
не принципиально где это делать, можете сделать и в шаблоне.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Zelyonkin

  • Захожу иногда
  • 110
  • 0 / 0
не принципиально где это делать, можете сделать и в шаблоне.
А не подскажете где они формируются, что бы увидеть механизм формирования в JoomShopping meta тегов?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Цитата: \components\com_jshopping\controllers\product.php
JshopHelpersMetadata::product($category, $product);

Цитата: \components\com_jshopping\helpers\metadata.php
public static function product($category, $product){
...
}
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Zelyonkin

  • Захожу иногда
  • 110
  • 0 / 0
Огромная благодарность!
*

Zelyonkin

  • Захожу иногда
  • 110
  • 0 / 0
Может кому пригодится:
открываем \components\com_jshopping\helpers\metadata.php и втыкаем
Код
	public static function product($category, $product){
$app = JFactory::getApplication();
$Itemid = $app->input->getInt('Itemid');
if (getShopMainPageItemid()==$Itemid){
            appendExtendPathway($category->getTreeChild(), 'product');
        }
$menu = $app->getMenu();
$menuItem = $menu->getItem($Itemid);       
if ($menuItem->query['view']!='product'){
appendPathWay($product->name);
}

                //Тут наш код
$meta_title_ru_cat = 'meta_title_ru-RU';
$meta_keyword_ru_cat = 'meta_keyword_ru-RU';
$meta_description_ru_cat = 'meta_description_ru-RU';
        if ($product->meta_title=="") $product->meta_title = $product->name;
if ($product->meta_keyword=="") $product->meta_keyword = str_replace('{name}', $product->name, $category->$meta_keyword_ru_cat);
if ($product->meta_description=="") $product->meta_description = str_replace('{name}', $product->name, $category->$meta_description_ru_cat);
        setMetaData($product->$meta_title_ru_cat, $product->meta_keyword, $product->meta_description);
        /* setMetaData($product->meta_title, $product->meta_keyword, $product->meta_description); */
}
Вот и всё. Из мета категории берём например "{name} отличный товар" и получаем в дескрипшине "батарейка отличный товар".
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Плагин - Вывод значения поля из таблицы продуктов в корзине JoomShopping

Автор draff

Ответов: 3
Просмотров: 2189
Последний ответ 26.02.2024, 07:00:01
от kit2m2
Плагин - Количество товаров в категории [Скачать]

Автор kit2m2

Ответов: 8
Просмотров: 2782
Последний ответ 06.07.2021, 18:31:46
от kit2m2
Плагин для покупки в категории товара JoomShopping 4, с применением ajax

Автор draff

Ответов: 14
Просмотров: 1273
Последний ответ 18.05.2020, 06:29:43
от draff
Получить ID категории в шаблоне checkout

Автор stas_rsv

Ответов: 28
Просмотров: 1184
Последний ответ 30.03.2020, 11:04:11
от stas_rsv
Реклама между товарами в категории

Автор dron

Ответов: 37
Просмотров: 1741
Последний ответ 02.10.2019, 15:56:35
от kit2m2