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

v1tal1us

  • Новичок
  • 6
  • 0 / 0
Собственно вопрос в сабже.
Нужно в шаблоне(\templates\ххх\index.php) показать название раздела.
Версия: Joomla 1.5.8 Russian
Попробовал:
<?php echo JText::_($this->item->section;);?>
показывает пустоту.
Гуглил 5 часов, толку мало.
 !!!???!!!

« Последнее редактирование: 22.12.2008, 21:30:03 от v1tal1us »
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
в index.php шаблона никак :) Можжно только если у вас пункты меню привязаны к конкретным разделам или категориям. Подробнее опишите что вам нужно?
*

v1tal1us

  • Новичок
  • 6
  • 0 / 0
в index.php шаблона никак :) Можжно только если у вас пункты меню привязаны к конкретным разделам или категориям. Подробнее опишите что вам нужно?

Ну как же так!)
Это не укладывается в моей "шкорлупе"...ну не может такого быть. Должен быть вариант.

У меня есть верхнее меню, которое выступает в роли проводника по разделам. Хочу что б при навигации, на странице указывалось в каком разделе находится заблудшая душа  ^-^




« Последнее редактирование: 22.12.2008, 21:17:20 от v1tal1us »
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
сделай в шаблоне print_r($this) и посмотри что там лежит
*

v1tal1us

  • Новичок
  • 6
  • 0 / 0
сделай в шаблоне print_r($this) и посмотри что там лежит

Спасибо, весьма полезная информация выявилась (Я лишь додумался до "print_r(array_keys(get_defined_vars()));" =) ).
Да, действительно есть такая переменная $this->title;, но она указывает на название текущей статьи. А мне бы раздел узнать)
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Да, действительно есть такая переменная $this->title;, но она указывает на название текущей статьи. А мне бы раздел узнать)
я так думаю только запросом в базу в таблицу #__content и цеплять таблицу разделов, в условии WHERE указывать ID текущей статьи
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

v1tal1us

  • Новичок
  • 6
  • 0 / 0
я так думаю только запросом в базу в таблицу #__content и цеплять таблицу разделов, в условии WHERE указывать ID текущей статьи

Я про это тоже думал. Кстати, а как ID узнать?)
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
я так думаю только запросом в базу в таблицу #__content и цеплять таблицу разделов, в условии WHERE указывать ID текущей статьи
И это все делать в index.php шаблона? :)

Я же написал выше опишите подробнее где вам надо выводить название раздела, тогда можно будет помочь а так уж извиняйте :)
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Я про это тоже думал. Кстати, а как ID узнать?)
Код: php
$id = JRequest::getCmd('id');
Это в index.ru шаблона при условии нахождения в полном просмотре материала (когда task == view)
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

v1tal1us

  • Новичок
  • 6
  • 0 / 0
Я же написал выше опишите подробнее где вам надо выводить название раздела, тогда можно будет помочь а так уж извиняйте :)

Не видел смыла расписывать дизайн сайта)
Ну раз так, то могу в кратце:
1. Диз. классический: верхняя часть, левая и центральная.
2. Центральная часть динамически меняется
Код
<jdoc:include type="component" />
   
3. В верхней - находится меню. Меню представляет собой ссылки на разделы
Код
http://***/index.php?option=com_content&view=article&id=**&Itemid=**
4. И есть левая часть где в зависимости от раздела меняется содержимое.
Итого: нужно в левой части, в шапке бокса, указывать название текущего раздела.


Цитировать
И это все делать в index.php шаблона? :)
Ну зачем жэ, можно немного и "поинклудить" )
« Последнее редактирование: 22.12.2008, 22:48:37 от v1tal1us »
*

v1tal1us

  • Новичок
  • 6
  • 0 / 0
Код: php
$id = JRequest::getCmd('id');
Это в index.ru шаблона при условии нахождения в полном просмотре материала (когда task == view)

Выгрибает ГЭТ запросы неплохо. Спасибо)
Думал что для этих целей глобальная переменная есть. Ну так даже лучше)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Заголовок страницы вида Имя материала / имя категории / имя раздела /

Автор rubasket

Ответов: 2
Просмотров: 18779
Последний ответ 24.03.2017, 01:13:50
от mbgr
В поиске название сайта отображается неправильно

Автор peroperopepero

Ответов: 1
Просмотров: 1586
Последний ответ 20.07.2016, 15:01:44
от draff
как узнать IP адрес пользователя, какой раздел сейчас смотрит, что делал, что делает... и т.д.

Автор asilbeko

Ответов: 3
Просмотров: 5028
Последний ответ 22.12.2014, 06:09:23
от arturk
Как убрать название сайта из шапки?

Автор Andronchic

Ответов: 43
Просмотров: 26015
Последний ответ 13.04.2014, 21:04:30
от Aleks_El_Dia
Материалы не разбиваются по колонкам в блоге раздела

Автор andreykor

Ответов: 2
Просмотров: 2107
Последний ответ 04.02.2014, 12:39:14
от SwopTM