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

Маэстро

  • Захожу иногда
  • 51
  • 0 / 0
Всем привет.

А есть ли какая нибудь возможность выводить модули в шаблонах вывода материалов (те что находятся в папках tmpl)?
Например, необходимо вывести модуль между заголовком componentheading и содержимым блога blog:

Цитировать
<?php if ($this->params->get('show_page_title', 1)) : ?>
<div class="componentheading<?php echo $this->params->get('pageclass_sfx');?>"><h1>
   <?php echo $this->escape($this->params->get('page_title')); ?></h1>
</div>
<?php endif; ?>
<jdoc:include type="modules" name="left" style="lpx" />
<table class="blog<?php echo $this->params->get('pageclass_sfx');?>" cellpadding="0" cellspacing="0">

<jdoc:include type="modules" name="left" style="lpx" />  не работает.
Есть ли какой нибудь выход, чтобы как нить воткнуть вывод модуля?

« Последнее редактирование: 14.04.2009, 14:36:12 от Forget-me-not »
*

koguja

  • Захожу иногда
  • 183
  • 16 / 0
  • Учиться , учиться .... (R) Ленин
Re: Вывод модуля из tmpl файлов джумлы
« Ответ #1 : 14.04.2009, 04:01:53 »
Если я правильно понял, то есть желание вставить модуль внутри текста.

Для этого :

1. создаём позиции в шаблоне , например "content1"
2. далее создаём модуль "Пример" и задаем позицию расположения "content1"
3. в тексте пишем "{loadposition content1}"

в результате получается , что внутри текста у нас будет находить и работать модуль "Пример"


P.S. я так использовал модуль c HTML кодом , для показа банеров в середине текста. И например карусельку для прокрутки(слайдшоу) рекламы.
Новости Joomla | Joomla 1.5 FAQ | Если тема ушла с первого листа , а нужна помощь , пишите ПМ
*

Маэстро

  • Захожу иногда
  • 51
  • 0 / 0
Re: Вывод модуля из tmpl файлов джумлы
« Ответ #2 : 14.04.2009, 04:10:27 »
По поводу середины текста это да, это работает. Но проблема в том, что есть желание вставить модуль в том месте, где подобный финт не сработает.
Например, мне нужно вставить модуль под заголовком страницы, на которой блогом выводятся материалы заданной категории. Тем самым возможности вставить вывод модуля в статью не получается. Хотя если сделать статью, которая была бы всегда первой при выводе материалов блогом, скрыть для неё все заголвки и т.п.. а в теле статьи вписать loadposition в данном случае это сработает. Но это не самый гибкий способ я думаю, так как это будет уже зависеть от сортировки материалов в блоге, и нужно чтобы эта статья всегда находилась на первом месте. Да и в прницпе это вобще кривой способ, получается левый материал в категории, который может попадасться в других местах сайта, где этого не нужно.
*

koguja

  • Захожу иногда
  • 183
  • 16 / 0
  • Учиться , учиться .... (R) Ленин
Re: Вывод модуля из tmpl файлов джумлы
« Ответ #3 : 14.04.2009, 04:42:27 »
Как вариант решения

Код
jimport('joomla.application.module.helper');
    $mods = JModuleHelper::getModules('product_page');
    echo JModuleHelper::renderModule($mods[0]);

где "product_page" - это позиция(раздел) для модуля (типо "content1") , а "$mods[0]" позволит загрузить первый модуль в этом разделе.
Новости Joomla | Joomla 1.5 FAQ | Если тема ушла с первого листа , а нужна помощь , пишите ПМ
*

Маэстро

  • Захожу иногда
  • 51
  • 0 / 0
Re: Вывод модуля из tmpl файлов джумлы
« Ответ #4 : 14.04.2009, 14:29:57 »
Спасибо, заработало!
*

Sergey2

  • Давно я тут
  • 651
  • 15 / 1
RE: Вывод модуля из tmpl файлов Joomla
« Ответ #5 : 23.06.2014, 23:18:43 »
а как бы еще сделать так что бы у модуля заголовок показывался?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как поменять основные цвета модуля

Автор aisedora21

Ответов: 7
Просмотров: 4285
Последний ответ 24.06.2021, 20:23:06
от Moysha
[Решено] Проблема с авторизацией Invalid Token

Автор treX

Ответов: 100
Просмотров: 96482
Последний ответ 06.10.2019, 16:55:45
от PaLyCH
Как убрать ссылку на allforjoomla.ru из модуля SimpleForm2?

Автор Loh

Ответов: 3
Просмотров: 3033
Последний ответ 20.06.2017, 11:17:28
от ZyX
Flow player вставка файлов.

Автор ksv

Ответов: 3
Просмотров: 2789
Последний ответ 16.06.2017, 21:29:30
от altvvc
Как проверить форму обратной связи [Решено]

Автор mafiozzzza

Ответов: 8
Просмотров: 6749
Последний ответ 30.05.2017, 11:34:11
от darkghost