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

andreiz

  • Захожу иногда
  • 75
  • 0 / 0
Здравствуйте. Начну наверно с самых простых вопросов, на мой взгляд
1) Какой файл отвечает за вывод материалов по тегам? Я имею ввиду не CSS файл а php.
2) Как создать двойное доп. поле? Например берем доп полем ссылку, пишем название доп поля и в дальнейшем мы можем вставлять только одну ссылку, а как сделать чтобы под одним названием можно было вставлять несколько ссылок?
3) И третий вопрос, самый сложный. Можно ли выводить материалы не по стандартным вариантам K2 (по популярности, по дате публикации, по рейтингу и т.д.), а по доп полю? То есть  у меня есть доп поле "дата релиза" вот по нему мне и нужно выводить. 
Может быть модули какие-нибудь есть способные на это. Хочу просто сделать страничку недавние релизы, ну и неплохо было бы ближайшие релизы, но это еще сложнее.
Надеюсь вы поняли о чем речь.
Надеюсь на вашу помощь и подсказки.
Спасибо
*

andreiz

  • Захожу иногда
  • 75
  • 0 / 0
Все еще нуждаюсь в Вашей помощи. =)
*

Dusted

  • Захожу иногда
  • 180
  • 49 / 0
1. tag.php
2. Делайте несколько одинаковых доп. полей "сслыка", пустые доп. поля скроются если пустые. Или делайте тип поля "текстовая область"
3. хз если честно
Куплю ваши сайты, рассмотрю все варианты - пишите в личку.
*

andreiz

  • Захожу иногда
  • 75
  • 0 / 0
Спасибо. Но возник еще вопрос по тегам.
В K2 для тегов можно включить или отключить "Вводный текст материала" Но нельзя поставить ограничение слов как в категориях. Тоесть если я при создании материала не использую кнопку подробнее то в тегах будет отображаться весь материал целиком.
Как можно в тегах ввести ограничение на кол-во слов или букв.
В php не селен.
Знаний хватило лишь на то чтобы заменить участок кода из файла tag.php
Код
<?php if($item->params->get('tagItemIntroText',1)): ?>
  <!-- Item introtext -->
  <div class="tagItemIntroText">
  <?php echo $item->introtext; ?>
  </div>
  <?php endif; ?>
На кусок кода из файла category_item.php
Код
	  <?php if($this->item->params->get('catItemIntroText')): ?>
  <!-- Item introtext -->
  <div class="catItemIntroText">
  <?php echo $this->item->introtext; ?>
  </div>
  <?php endif; ?>
Но тогда страничка с тегами не работает.
Поковыряв еще выяснил что на страничку пагубно влияет замена $item на $this->item
Подскажите пожалуйста...
*

andreiz

  • Захожу иногда
  • 75
  • 0 / 0
Забыл сказать. что в выше сказанном идет речь о сортировке по тегам, то есть о материалах содержащих одинаковый тег
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Есть ответ на третий вопрос. Есть модуль, который фильтрует по любому полю. Покупал его сам для подобной задачи. На сайте joomcar.net это было. Бесплатных решений не встречал...
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
А вообще вы правильно мыслите, сортировка по тегам единственное, что спасает...

Вот ограничение в 200 символов

вместо

Код
<?php echo $item->introtext; ?>

ставите

Код
echo K2HelperUtilities::characterLimit($item->introtext;,200); ?>
*

andreiz

  • Захожу иногда
  • 75
  • 0 / 0
Эхх не работает (
Ошибка HTTP 500 (Internal Server Error)
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Пардон...

Код
<?php echo K2HelperUtilities::characterLimit($item->introtext;,200); ?>
Ну вы тоже смотрите код, разбирайтесь, я не программист, все опытным путем.

Я забыл в начале
Код
<?php

Эта хрень K2HelperUtilities готовая функция, ее только надо вызвать.

А вообще, когда в файле шаблона есть
Код
<?php
начинается php код,
Код
?>
код закончился.
*

andreiz

  • Захожу иногда
  • 75
  • 0 / 0
Код
<?php echo K2HelperUtilities::characterLimit($item->introtext;,200); ?>
да так я и писал.
К сожалению все мои эксперименты заканчиваются на том чтобы поменять места вывода и CSS поправить как надо.
А вот как там что вызывать для меня это пока совсем лес густой. =) Можно сказать совсем в php не шарю
*

andreiz

  • Захожу иногда
  • 75
  • 0 / 0

А вообще, когда в файле шаблона есть
Код
<?php
начинается php код,
Код
?>
код закончился.

Ну это я уже выучил =)
*

andreiz

  • Захожу иногда
  • 75
  • 0 / 0
Все решил проблему с выводом тегов
Код
<?php echo K2HelperUtilities::characterLimit($item->introtext,200); ?>
после introtext точка с запятой не нужно.
Спасибо за помощь.

*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Не знаю у меня стоит точка с запятой...
Ну получилось?
*

andreiz

  • Захожу иногда
  • 75
  • 0 / 0
Да.
Работает как часы)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Перенос материалов из Joomla3 + K2 в Joomla4

Автор Magnum79

Ответов: 0
Просмотров: 1472
Последний ответ 24.05.2024, 21:49:14
от Magnum79
Как добавить свой класс для страниц вывода материалов по тегу k2?

Автор Slava77

Ответов: 0
Просмотров: 4081
Последний ответ 16.02.2023, 23:29:34
от Slava77
Наполняя категорию K2 копированием материалов, пропадает навигация в статьях

Автор Slava77

Ответов: 4
Просмотров: 3026
Последний ответ 24.12.2021, 22:30:56
от Slava77
Как добавить дополнительным полям K2 разные классы?

Автор Slava77

Ответов: 3
Просмотров: 2301
Последний ответ 06.06.2021, 22:36:00
от sivers
Перестала работать опция оценки материалов/рейтинг в компоненте K2

Автор Yonakano

Ответов: 4
Просмотров: 1766
Последний ответ 07.02.2021, 00:30:57
от Yonakano