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

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Было:
Код
<p class="ja-day">
 <?php
echo "<span class=\"day\">".date ('D').",</span>";
echo "<span class=\"date\">".date ('d')."</span>";
echo "<span class=\"month\">".date ('M')."</span>";
echo "<span class=\"year\">".date ('Y')."</span>";
 ?>
</p>

Сам написал, хоть и полный 0 в PHP  ::)
Код
<p class="ja-day">
<?php
setlocale(LC_TIME, "uk_UA.UTF8");
echo strftime(" %a ");
echo strftime("%d ");
echo strftime("%b ");
echo strftime("%Y");
?>
</p>

Неполучается придать стиль (Например "<span class=\"day\">"). незнаю как правильно написать...  Пробовал методом научного тыка - лезет ошибка в той строке...
PHP 5.3.6

Да, видел пару тем с возможным решением И снова вывод даты
Код
echo JHTML::_('date', date('Y-m-d'), JText::_('DATE_FORMAT_LC3'));

Вот а как сюда прикрутить вывод дня недели (Например: Суб) и еще + это все на украинском (ну если это есть в переводе то должно быть просто)
Спойлер
[свернуть]
Но как стили прикрутить отдельно к дню недели, отдельно к месяцу... ?
« Последнее редактирование: 12.06.2011, 15:29:53 от Mihanja80 »
Я с мобильного, в основном...
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Re: Стиль вывода даты на родном языке
« Ответ #1 : 05.06.2011, 00:46:32 »
РЕШЕНО Украинский:
Код
<p class="ja-day">
<?php
setlocale(LC_TIME, "uk_UA.UTF8");
echo "<span class=\"day\">".strftime("%a").",</span>";
echo "<span class=\"date\">".strftime("%d")."</span>";
echo "<span class=\"month\">".strftime("%b")."</span>";
echo "<span class=\"year\">".strftime("%Y")."</span>";
?>
</p>
Получим: Сбт,04Чер2011

РЕШЕНО Русский:
Код
<p class="ja-day">
<?php
setlocale(LC_TIME, "ru_RU.UTF8");
echo "<span class=\"day\">".strftime("%a").",</span>";
echo "<span class=\"date\">".strftime("%d")."</span>";
echo "<span class=\"month\">".strftime("%b")."</span>";
echo "<span class=\"year\">".strftime("%Y")."</span>";
?>
</p>
Получим: Сбт,04Июн2011
 *DRINK* Метод научного тыка победил  *DRINK*
(а не хватало-то всего две точки)

Источник: http://ua2.php.net/manual/ru/function.strftime.php

Если в чем ошибся - поправьте. Код работает 100% ;) и не нужно писать кучу кода :)
« Последнее редактирование: 05.06.2011, 00:54:14 от Mihanja80 »
Я с мобильного, в основном...
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Продолжу...
 
Код
echo "<span class=\"day\">".date ('H').",</span>";
setlocale(LC_TIME, "uk_UA.UTF8");
echo "<span class=\"day\">".strftime("%H %a").",</span>";
И обе функции выводят время на три часа меньше (VPS в германии, я в Украине)



Куда еще копать? Что покрутить чтобы выровнять время?
Я с мобильного, в основном...
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Код: php
echo '<span style="color:red;">'.JHTML::_('date', 'now', JText::_('l, ')).'</span>'.
'<span style="color:blue;">'.JHTML::_('date', 'now', JText::_('d ')).'</span>'.
'<span style="color:green;">'.JHTML::_('date', 'now', JText::_('F ')).'</span>'.
'<span style="color:crimson;">'.JHTML::_('date', 'now', JText::_('Y')).'</span>'.
'<span style="color:silver;">'.JHTML::_('date', 'now', JText::_(' H:i')).'</span>';
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Код
echo '<span class=\"day\">'.JHTML::_('date', 'now', JText::_('l, ')).'</span>'.
'<span class=\"date\">'.JHTML::_('date', 'now', JText::_('d ')).'</span>'.
'<span class=\"month\"">'.JHTML::_('date', 'now', JText::_('F ')).'</span>'.
'<span class=\"year\">'.JHTML::_('date', 'now', JText::_('Y')).'</span>';


=  Понеділок, 06 червня 2011


Lex, Огромное спасибо за корректное решение вопроса.   *DRINK*
Данный вариант будет работать и на многоязычных сайтах ;) + реагирует на настройку часового пояса в админке Joomla

Но вопрос, почему же с сервера не корректно тянулся часовой пояс не дает покоя...
Я с мобильного, в основном...
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
зачем через JText формат то пропускать? :)
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Так скопипастил строку 4 раза. Вот JText на цифирках и остался.
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Так, а как правильно?  :o


Так?
Код
<?php
echo '<span class=\"day\">'.JHTML::_('date', 'now', ('l, ')).'</span>'.
'<span class=\"date\">'.JHTML::_('date', 'now', ('d ')).'</span>'.
'<span class=\"month\"">'.JHTML::_('date', 'now', ('F ')).'</span>'.
'<span class=\"year\">'.JHTML::_('date', 'now', ('Y')).'</span>';
?>

Или так?
Код
<?php
echo '<span class=\"day\">'.JHTML::_('date', 'now', JText::_('l, ')).'</span>'.
'<span class=\"date\">'.JHTML::_('date', 'now', ('d ')).'</span>'.
'<span class=\"month\"">'.JHTML::_('date', 'now', ('F ')).'</span>'.
'<span class=\"year\">'.JHTML::_('date', 'now', ('Y')).'</span>';
?>

Работают оба варианта...
« Последнее редактирование: 06.06.2011, 22:32:55 от Mihanja80 »
Я с мобильного, в основном...
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Да хюз. J1.6 никто и не проверял очень то. Я бы все же на словах перевод оставил. А цифры они и в Африке цифры.
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Значит остановимся на таком варианте:
Код: php
<p class="ja-day">
<?php
echo date ('H:m:s',time ());
echo '<span class=\"day\">'.JHTML::_('date', 'now', JText::_('l, ')).'</span>'.
'<span class=\"date\">'.JHTML::_('date', 'now', ('d ')).'</span>'.
'<span class=\"month\"">'.JHTML::_('date', 'now', JText::_('F ')).'</span>'.
'<span class=\"year\">'.JHTML::_('date', 'now', ('Y')).'</span>';
?>
</p>
yes!
Я с мобильного, в основном...
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
JHTML::_('date', 'now', 'Y');
кавычки там не нужны и Jtext тоже.
там задается формат даты. Форматы описаны здесь - http://php.net/manual/en/function.date.php
а так по идее оно и так должно переводиться на нужный язык.
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
JHTML::_('date', 'now', 'Y');
кавычки там не нужны и Jtext тоже.
там задается формат даты. Форматы описаны здесь - http://php.net/manual/en/function.date.php
а так по идее оно и так должно переводиться на нужный язык.

 :o

Код: php
echo '<span class=\"day\">'.JHTML::_(date, now,('l, ')).'</span>'.

?  :'(

(Экранирование двойных кавычек пусть так и будет?)
Я с мобильного, в основном...
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Ребята, можно получить заключение по теме?
Код
echo '<span class=\"day\">'.JHTML::_(date, now,('l, ')).'</span>'.
Так правильно? ::)
Я с мобильного, в основном...
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
echo '<span class=\"day\">'.JHTML::_(date, now, 'l, ').'</span>'.
Скобки не нужны они от JText остались.
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Я с мобильного, в основном...
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Включил отображение ошибок на максимум (PHP5.3.6):




 :dry:

« Последнее редактирование: 12.06.2011, 15:34:18 от Mihanja80 »
Я с мобильного, в основном...
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
JHTML::_('date', 'now', 'Y');
кавычки там не нужны и Jtext тоже.
там задается формат даты. Форматы описаны здесь - http://php.net/manual/en/function.date.php
а так по идее оно и так должно переводиться на нужный язык.
Вернул кавычки и ошибка пропала :)

Окончательний вариант:
Код: php
<p class="ja-day">
      <?php
echo '<span class=\"day\">'.JHTML::_('date', 'now', 'l, ').'</span>'.
'<span class=\"date\">'.JHTML::_('date', 'now', 'd ').'</span>'.
'<span class=\"month\"">'.JHTML::_('date', 'now', 'F ').'</span>'.
'<span class=\"year\">'.JHTML::_('date', 'now', 'Y').'</span>';
      ?>
    </p>
Я с мобильного, в основном...
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Обновление!   ::)
Валидатор ругался...

Код: php
<p class="ja-day">
<span class="day"> <?php echo JHTML::_('date', 'now', 'l,'); ?></span>
<span class="date"> <?php echo JHTML::_('date', 'now', 'd'); ?></span>
<span class="month"> <?php echo JHTML::_('date', 'now', 'F'); ?></span>
<span class="year"> <?php echo JHTML::_('date', 'now', 'Y'); ?></span>
</p>

Спасибо Lex за помощь  :D
Я с мобильного, в основном...
*

alsak

  • Захожу иногда
  • 100
  • 2 / 0
В способе предложенном Mihanja80 названия месяца, если оно состоит из 6 и более букв налазит на год. Как можно увеличить размер ячейки для месяца?
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Прописать стили (отступ слева/справа) для классов, делов-то на пару минут...
Я с мобильного, в основном...
*

jullia.shipitcina

  • Новичок
  • 1
  • 0 / 0
setlocale(LC_ALL, "ru_RU.UTF8");
$dateView = strftime("%d %B %Y", $timestamp);

Поставила в setlocale "ru_RU.UTF8". Дата стала выводиться на русском. А как теперь сделать, чтобы месяца выводились в падеже? Июня, Июля и т.д.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться