Новости 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 Ответов
  • 2838 Просмотров
*

dexteron

  • Захожу иногда
  • 121
  • 17 / 0
  • Помог? Поставь мне "+"
Здравствуйте.

У меня возникла некая проблема. Не знаю как изменить расположение вывода даты и автора статьи. Вот чтобы я хотел сделать



Дата слева внизу под материалом, а автор справа. И хотелось бы это дело как-то может разукрасить (самый большой прямоугольник фоновая картинка).
Какие будут предложения?

Заранее спасибо

Я так понял в данном шаблоне вывод даты и автора стандартный, т. е. шаблон не подключает свои стили и способ вывода.
Еще я заметил на другом шаблоне с его стилем вывода даты и автора есть в папке html каталог com_content в котором еще парочка папок (archive, article, category, frontpage). В папке article есть файл default.php, я так понял, он отвечает за вывод.

Так ли это - не знаю. Можно ли скопировать файл default.php в свой шаблон. Отредактировать его и закинуть в созданную папку по пути html/com_content/article? Прокатит ли такой способ. Да, и конечно стили изменить в этом файле на свои.
Joomla 1.5
« Последнее редактирование: 12.01.2012, 18:00:08 от dexteron »
*

sezon

  • Захожу иногда
  • 54
  • 0 / 0
У Вас получилось так оформить или нет?
У меня сейчас такая же проблема
*

Go-destroy

  • Захожу иногда
  • 221
  • 4 / 1
юзайте Com_content>>> article
Щас вот как раз этим занимаюсь)
*

sezon

  • Захожу иногда
  • 54
  • 0 / 0
В общем облазил весь файл Com_content>>> article default.php

Вывод осуществляется вот здесь:
Код
echo '- 1-3 - 1234567890 -';

if ($article->showUrl)
    $params['metadata-header-icons'][] = $article->urlInfo();

// Build article content

$content = '- 2 - 1234567890 -'.'';
Но там ничего нет.
Видать вывод должен быть в другом файле.
*

sezon

  • Захожу иногда
  • 54
  • 0 / 0
Кароче, плюнул на всё ... сделал немного по другому:
Код
$content = '';

if (!$article->showIntro)
    $content .= $article->event('afterDisplayTitle');
$content .= $article->event('beforeDisplayContent');
$content .= $article->toc();
if ($article->showText)
    $content .= $article->content();
else if ($article->showTeaser) {
    $content .= $article->introText();
    if ($this->showReadmore)
        $content .= $article->readmore();
}
$content .= '<p align="right">'.JText::sprintf(JHTML::_('date', $this->article->modified, JText::_('DATE_FORMAT_LC2'))).'</p>';
Код
$content .= $article->event('afterDisplayContent');
$params['content'] = $content;
Поместил красную строчку между двумя частями файла.
Если найдёшь другой способ - отпишись!
*

yad

  • Новичок
  • 5
  • 0 / 0
Ребята помогите найти решение для 2.5.8
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как изменить межстрочный интервал в списке?

Автор kirill-juk

Ответов: 2
Просмотров: 1951
Последний ответ 28.10.2017, 18:51:40
от kirill-juk
Изменить страницу "Default"

Автор virusvvv

Ответов: 4
Просмотров: 1671
Последний ответ 12.01.2017, 14:48:08
от virusvvv
Изменить текст ссылки, выводимой в адресной строке

Автор acamaz

Ответов: 2
Просмотров: 1839
Последний ответ 28.11.2016, 20:59:45
от KKAAZZOO
Изменить Email

Автор andrei1537

Ответов: 5
Просмотров: 2051
Последний ответ 06.07.2016, 01:21:16
от Aleks_El_Dia
Как изменить нижний колонтитул?

Автор фантом

Ответов: 19
Просмотров: 24685
Последний ответ 13.03.2016, 17:57:10
от KKAAZZOO