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

Helios

  • Захожу иногда
  • 421
  • 31 / 1
  • Аэтошозадеталь?
mosFormatDate и смещение
« : 08.10.2008, 01:01:14 »
Возник такой вопрос. Есть дата и время записанные в виде 2008-10-10 00:00:00
Когда пишу echo mosFormatDate($rel_date); мне выводит
09.10.2008 г.

т.е. формат вывода времени правильный, но вот дата то 9 октября, вместо 10-го из записи...
пробовал напрямую strftime, но это уже от безысходности. к тому же дата выводится в разных страницах, и везде на 1 день меньше чем нужно.

с настройками на сервере все в порядке.
в самой joomla с датой тоже все в порядке. а вот в моем компоненте что-то совсем плохо.
/* Have a nice day! */
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: mosFormatDate и смещение
« Ответ #1 : 08.10.2008, 01:20:49 »
А в каком формате дата хранится у вас в базе, и что непосредственно в поле $rel_date? Сделайте var_dump($rel_date); и посмотрите, что там сейчас находится...
*

Helios

  • Захожу иногда
  • 421
  • 31 / 1
  • Аэтошозадеталь?
Re: mosFormatDate и смещение
« Ответ #2 : 08.10.2008, 03:02:17 »
формат даты в базе - 2008-10-10 00:00:00
результат var_dump($rel_date); - string(19) "2008-10-10 00:00:00"
результат echo mosFormatDate($rel_date); - 09.10.2008 г.

PS! То ли я тупой, то ли уже поздно...
/* Have a nice day! */
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: mosFormatDate и смещение
« Ответ #3 : 08.10.2008, 03:13:04 »
В функцию mosFormatDate нужно передавать дату, а не строку. Т.е. сначала, вам прийдется из указанной строки, сделать дату, с помощью strtotime, а уже потом, полученную дату вы сможете переформатировать.

Т.е. примерно вот так:

Код: php
if (is_string($rel_date)) {
$rel_date = strtotime($rel_date);
}
echo mosFormatDate($rel_date);
*

Arina

  • Захожу иногда
  • 164
  • 1 / 0
Re: mosFormatDate и смещение
« Ответ #4 : 13.07.2009, 00:04:33 »
В функцию mosFormatDate нужно передавать дату, а не строку. Т.е. сначала, вам прийдется из указанной строки, сделать дату, с помощью strtotime, а уже потом, полученную дату вы сможете переформатировать.

Т.е. примерно вот так:

Код: php
if (is_string($rel_date)) {
$rel_date = strtotime($rel_date);
}
echo mosFormatDate($rel_date);


Где этот код можно прописать ? Все никак не могу найти, где можно время изменить в формате на главной: день.месяц.год + время публикации.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: mosFormatDate и смещение
« Ответ #5 : 13.07.2009, 00:15:15 »
Все никак не могу найти, где можно время изменить в формате на главной: день.месяц.год + время публикации.
что именно вам нужно изменить-то?
*

Arina

  • Захожу иногда
  • 164
  • 1 / 0
Re: mosFormatDate и смещение
« Ответ #6 : 13.07.2009, 12:03:09 »
что именно вам нужно изменить-то?

Сайт один попросили доработать информационный, новости на главной выводятся таким образом:

Заголовок
Дата публикации
Первый абзац

а нужно сделать:

Заголовок
Дата публикации + ВРЕМЯ ПУБЛИКАЦИИ
Первый абзац

Сайт под управлением Joomla Lavra edition 12 вроде, не 15 точно.

*

Physicist

  • Глобальный модератор
  • 984
  • 194 / 0
  • Рябов Денис
Re: mosFormatDate и смещение
« Ответ #7 : 13.07.2009, 12:25:15 »
А что у Вас в $mosConfig_offset?
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: mosFormatDate и смещение
« Ответ #8 : 13.07.2009, 14:04:25 »
Чтобы у вас отображалось время публикации, исправьте в языковом файле (/language/russian.php) строчку:

Код: php
DEFINE('_DATE_FORMAT_LC',"%A, %d %B %Y");
на
Код: php
DEFINE('_DATE_FORMAT_LC',"%d.%m.%Y %H:%M");
*

Arina

  • Захожу иногда
  • 164
  • 1 / 0
Re: mosFormatDate и смещение
« Ответ #9 : 13.07.2009, 16:12:45 »
А что у Вас в $mosConfig_offset?

а где его найти ?
*

Arina

  • Захожу иногда
  • 164
  • 1 / 0
Re: mosFormatDate и смещение
« Ответ #10 : 13.07.2009, 16:13:40 »
Чтобы у вас отображалось время публикации, исправьте в языковом файле (/language/russian.php) строчку:

Код: php
DEFINE('_DATE_FORMAT_LC',"%A, %d %B %Y");
на
Код: php
DEFINE('_DATE_FORMAT_LC',"%d.%m.%Y %H:%M");

оки, спасибо, вечером попробую
*

Physicist

  • Глобальный модератор
  • 984
  • 194 / 0
  • Рябов Денис
Re: mosFormatDate и смещение
« Ответ #11 : 13.07.2009, 16:18:06 »
а где его найти ?

В configuration.php
*

Arina

  • Захожу иногда
  • 164
  • 1 / 0
Re: mosFormatDate и смещение
« Ответ #12 : 13.07.2009, 20:34:07 »
А что у Вас в $mosConfig_offset?

$mosConfig_offset = '0';
*

Arina

  • Захожу иногда
  • 164
  • 1 / 0
Re: mosFormatDate и смещение
« Ответ #13 : 13.07.2009, 20:47:45 »
Чтобы у вас отображалось время публикации, исправьте в языковом файле (/language/russian.php) строчку:

Код: php
DEFINE('_DATE_FORMAT_LC',"%A, %d %B %Y");
на
Код: php
DEFINE('_DATE_FORMAT_LC',"%d.%m.%Y %H:%M");

SMART!!! уже какой раз убеждаюсь, что ты не реально умный!!! СПАСИБО! мне очень помогло!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Смещение материала.

Автор alivsyk

Ответов: 1
Просмотров: 1700
Последний ответ 06.05.2009, 19:44:17
от alivsyk