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

Takusik

  • Осваиваюсь на форуме
  • 45
  • 3 / 0
В категории k2 задаю параметры Item view options, например:
 - Item created date and time = Hide
 - Comments = Hide

На всякий случай то же самое указала в глобальных параметрах k2.
В самом item-е указываю "Inherit from category" или даже "Hide".

На странице всё равно выводится дата создания item-а перед title-ом и фраза "Leave a comment" (или как она в русском варианте...), хотя сами поля работы с комментариями не выводятся.
Приходится править item.php, чтобы ненужные параметры не выводились.

Кто сталкивался с подобным? Это глюк k2 вообще, или глюк только моего k2 (2.5.7), или...?
*

paternoster

  • Давно я тут
  • 506
  • 24 / 1
Если вы наследуете настройки от другой категории, то что же вы хотите тогда добиться от этой? Снимите наследование и правьте, как душе угодно.
Для начала стоит все же разобраться с настройками, а уже только потом заниматься правкой шаблонов.Да и перевести не помешало бы компонент, раз уж совсем непонятно вам.
*

Takusik

  • Осваиваюсь на форуме
  • 45
  • 3 / 0
Вы неправильно поняли.
В категории я указываю "Hide". В Item-е ставлю "Inherit from category" (т.е. унаследовать Hide) или явно проставляю Hide.
Т.е. везде указано и/или наследуется Hide. Но поля всё равно выводятся.
С английским проблем нет. K2 английский - родной из шаблона. Поэтому не хочу никаких русификаций от греха... Другое дело, что в шаблоне может быть кривой k2. Поэтому и спрашиваю: только у меня такая проблема (тогда дело именно в моём k2) или у кого-то тоже такое встречается.
*

Takusik

  • Осваиваюсь на форуме
  • 45
  • 3 / 0
При более внимательном изучении шаблон/html/com_k2/templates/default/item.php обнаружилось, что:

1. Дата создания Item-а выводится, если задан Show хотя бы один из параметров Title, Author и т.д.:

строка 36:

Код
	<?php if(
$params->get('itemDateCreated') ||
$params->get('itemFontResizer') ||
$params->get('itemAuthor') ||
$params->get('itemPrintButton') ||
$params->get('itemEmailButton') ||
$params->get('itemSocialButton') ||
$params->get('itemVideoAnchor') ||
$params->get('itemImageGalleryAnchor') ||
$params->get('itemTitle') ||
$params->get('itemHits') ||
$params->get('itemCategory') ||
$params->get('itemRating')
): ?>
<aside>
<time datetime="<?php echo JHtml::_('date', $this->item->created, 'Y-m-d'); ?>"> <?php echo JHTML::_('date', $this->item->created, JText::_('d M')); ?> </time>
<ul>
<?php if($params->get('itemAuthor')): ?>
...


2. Фраза "Leave a comment" выводится без всяких условий всегда.
строка 392:
Код
<section>
<aside>
<h3 class="titleComments"> <?php echo JText::_('K2_LEAVE_A_COMMENT')?> </h3>
</aside>
<div class="k2box">
...


Если добавить соотв. условия, то будет выводится только в соответствии с настройками в категории или Item-е.

Я добавила вот так (возможно, неправильно, это простой copy-paste аналогичных условий, и так нужно именно мне (и вроде как работает)):

1. Дата выводится, если в Item-е или категории задано Item created date and time = "Show", работает также с различными вариантами наследования:

строка 50:
Код
<aside>
<?php if($params->get('itemDateCreated')): ?>
<time datetime="<?php echo JHtml::_('date', $this->item->created, 'Y-m-d'); ?>"> <?php echo JHTML::_('date', $this->item->created, JText::_('d M')); ?> </time>
<?php endif; ?>
<ul>
...

2. Фраза "Leave a comment" выводится, если в Item-е или категории задано Comment = "Show", работает также с различными вариантами наследования.
строка 392, которая стала 396:

Код
<section>
<?php if($params->get('itemComments')): ?>
<aside>
<h3 class="titleComments"> <?php echo JText::_('K2_LEAVE_A_COMMENT')?> </h3>
</aside>
<?php endif; ?>
<div class="k2box">
...
*

paternoster

  • Давно я тут
  • 506
  • 24 / 1
Оставить комментарий не выводится при отключении комментариев.Проверьте сам компонент, правильность его установки.Все, что вы поисываете есть некорректная работа.Версия 2.5.7 стабильна и без ярких глюков...)))
*

Takusik

  • Осваиваюсь на форуме
  • 45
  • 3 / 0
Я и подняла тему, потому что подозреваю, что дело именно в моём k2. Он был в шаблоне.

А разработчик сайта оказался нечестным. Сказал, что купил шаблон и другие компоненты официально (и соотв-но взял за это денег). А на самом деле всё скачал бесплатно. Вот как быть с такими... (не могу подобрать приличное слово).

Поэтому приходится самой разбираться. Уже столько сюрпризов нашла: от невидимых ссылок и глюков компонентов до дыр в безопасности :(

Само собой буду покупать всё официально, чтобы без сюрпризов в будущем.
*

paternoster

  • Давно я тут
  • 506
  • 24 / 1
Правило №1. Если и покупать, то только у официальных разработчкиов.Все остальное чревато котами в мешках.Тестировать и изучать можно может и на левых шаблонах.Но примерно половина вопросов на форуме как раз из этого и проистекают.То шаблон левый, то установка кривая, то еще какое горе...от своего же ума.
*

Takusik

  • Осваиваюсь на форуме
  • 45
  • 3 / 0
Купила и скачала официально шаблон. В шаблоне уже был установлен k2.
То же самое при выводе материала k2. Дело в том, что файлы k2  в шаблоне (docs/шаблон/html/com_k2/templates/default/*.php) отличаются от файлов k2 в компонентах (docs/components/com_k2/templates/default/*.php). Видимо, стиль изложения материала в шаблоне подразумевает нестандартный вывод материалов.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

K2 Store - вывод Product Options в карточке товара

Автор John_Flores

Ответов: 1
Просмотров: 1063
Последний ответ 26.11.2021, 12:04:32
от John_Flores
Не сохраняются параметры в пункте меню категория K2

Автор pyh

Ответов: 5
Просмотров: 2313
Последний ответ 21.09.2021, 04:56:14
от Alexs44
Ошибка components\com_k2\views\itemlist\view.html.php on line 485

Автор NIKOLY

Ответов: 5
Просмотров: 1133
Последний ответ 09.12.2020, 16:56:01
от NIKOLY
Почему Фейсбук не видит OG на сайте?

Автор Vadzim

Ответов: 9
Просмотров: 1318
Последний ответ 06.08.2020, 15:56:05
от AlexB
k2 router - исключается /item /itemlist/category/ убираем id из ссылок, транлитерация для тегов

Автор lammer

Ответов: 83
Просмотров: 41072
Последний ответ 12.03.2019, 10:07:10
от Pizzadox