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

jurassik

  • Давно я тут
  • 692
  • 52 / 1
результаты поиска
« : 25.10.2011, 16:17:09 »
в результатах поиска выводятся категории материала: $this->escape($result->section)
как добавить вывод родительской категории категории? \извиняюсь за тофтологию

т.е. есть категория А, в ней есть категория В, материал С принадлежит категории В.
нужен вывод врезультатах поиска: матриал С категория А-В
сам шучу - сам смеюсь
*

Tureckiy

  • Осваиваюсь на форуме
  • 35
  • 0 / 0
Re: результаты поиска
« Ответ #1 : 25.10.2011, 16:23:45 »
в результатах поиска выводятся категории материала: $this->escape($result->section)
как добавить вывод родительской категории категории? \извиняюсь за тофтологию

т.е. есть категория А, в ней есть категория В, материал С принадлежит категории В.
нужен вывод врезультатах поиска: матриал С категория А-В
доп запрос к по категориям и переделать страницу вывода
*

jurassik

  • Давно я тут
  • 692
  • 52 / 1
Re: результаты поиска
« Ответ #2 : 25.10.2011, 17:05:35 »
доп запрос к по категориям и переделать страницу вывода
вот зачем давать такие ответы?...
сам шучу - сам смеюсь
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Re: результаты поиска
« Ответ #3 : 25.10.2011, 19:22:33 »
в результатах поиска

Какого поиска - стандартного?
*

jurassik

  • Давно я тут
  • 692
  • 52 / 1
Re: результаты поиска
« Ответ #4 : 25.10.2011, 19:33:41 »
Какого поиска - стандартного?
да
сам шучу - сам смеюсь
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Re: результаты поиска
« Ответ #5 : 25.10.2011, 19:43:45 »
В общих чертах - в плагине search-K2 модифицировать запрос - добавить ещё один JOIN с таблицей #__k2_categories по id - parent
В качестве section соответственно будет не c.name, а слияние имён родительской и дочерней через разделитель, который вам больше по вкусу.

Конкретнее бы написал, если бы указали версию К2.
*

jurassik

  • Давно я тут
  • 692
  • 52 / 1
Re: результаты поиска
« Ответ #6 : 25.10.2011, 19:53:35 »
В общих чертах - в плагине search-K2 модифицировать запрос - добавить ещё один JOIN с таблицей #__k2_categories по id - parent
В качестве section соответственно будет не c.name, а слияние имён родительской и дочерней через разделитель, который вам больше по вкусу.

Конкретнее бы написал, если бы указали версию К2.
2.4.1
сам шучу - сам смеюсь
*

Tureckiy

  • Осваиваюсь на форуме
  • 35
  • 0 / 0
Re: результаты поиска
« Ответ #7 : 25.10.2011, 21:34:31 »
В общих чертах - в плагине search-K2 модифицировать запрос - добавить ещё один JOIN с таблицей #__k2_categories по id - parent
В качестве section соответственно будет не c.name, а слияние имён родительской и дочерней через разделитель, который вам больше по вкусу.

Конкретнее бы написал, если бы указали версию К2.
Это если категория второго уровня, если третьего и т.д  - то не подойдет - не универсальное решение!
*

jurassik

  • Давно я тут
  • 692
  • 52 / 1
Re: результаты поиска
« Ответ #8 : 25.10.2011, 21:52:23 »
Это если категория второго уровня, если третьего и т.д  - то не подойдет - не универсальное решение!
ну от Вас никакого решения...даже не универсального
сам шучу - сам смеюсь
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Re: результаты поиска
« Ответ #9 : 26.10.2011, 07:49:26 »
Это если категория второго уровня, если третьего и т.д ...

В таком случае рекурсия категорий просто повесит ваш поиск на долгое время, а может быть и сервер )))
Но если есть такое желание - я же не решение выложил, а направление решения.
Кто вам мешает сделать эту самую рекурсию и понаблюдать за производительностью поиска после этого?


По поводу 2-уровневого пути:

В первой части запроса (начинается на 99 строке) внимательно и аккуратно приводим к следующему виду:
Код
	$query = "
SELECT i.title AS title,
i.metadesc,
i.metakey,
c.name AS child_category,
p.name AS parent_category,
i.image_caption,
i.image_credits,
i.video_caption,
i.video_credits,
i.extra_fields_search,
i.created,
     CONCAT(i.introtext, i.fulltext) AS text,
     CASE WHEN CHAR_LENGTH(i.alias) THEN CONCAT_WS(':', i.id, i.alias) ELSE i.id END as slug,
     CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(':', c.id, c.alias) ELSE c.id END as catslug
     FROM #__k2_items AS i
     INNER JOIN #__k2_categories AS c ON c.id=i.catid AND c.access <= {$access}
LEFT JOIN #__k2_categories AS p ON p.id=c.parent AND p.access <= {$access}
WHERE (";

Пониже - уже примерно в районе 160 строк получится делаем так

Код
		if (isset($list)) {
foreach ($list as $key=>$item) {
if (!empty($list[$key]->parent_category)) {
$list[$key]->section = $list[$key]->parent_category.'/'.$list[$key]->child_category;
} else {
$list[$key]->section = $list[$key]->child_category;
}
$list[$key]->href = JRoute::_(K2HelperRoute::getItemRoute($item->slug, $item->catslug));

}
}

После этого получаете результаты поиска в таком виде

« Последнее редактирование: 26.10.2011, 11:22:11 от SDKiller »
*

jurassik

  • Давно я тут
  • 692
  • 52 / 1
Re: результаты поиска
« Ответ #10 : 26.10.2011, 11:22:03 »
спасибо, будем пробовать
сам шучу - сам смеюсь
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Re: результаты поиска
« Ответ #11 : 26.10.2011, 11:30:24 »
Кстати, подумалось ещё - можно попробовать для этих целей почистить от лишнего ссылку материала, получаемую через getItemRoute
Это сработает при включённом SEF и кириллических алиасах
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Разные страницы с результатами поиска на одном сайте com_k2

Автор NIKOLY

Ответов: 0
Просмотров: 2149
Последний ответ 22.08.2023, 15:44:05
от NIKOLY
Критерии поиска объекта в админке

Автор Abez

Ответов: 0
Просмотров: 866
Последний ответ 14.01.2020, 13:46:43
от Abez
K2 + JA Megafilter неправильное отображение результатов поиска

Автор ProggerF

Ответов: 0
Просмотров: 996
Последний ответ 15.08.2018, 14:49:22
от ProggerF
Поиск К2 + в результаты Категории

Автор jurassik

Ответов: 1
Просмотров: 1412
Последний ответ 28.11.2017, 20:06:03
от kisBoss
Как настроить вывод результатов поиска из K2 Tools?

Автор Magi

Ответов: 0
Просмотров: 1174
Последний ответ 03.06.2016, 09:05:06
от Magi