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

Aiden

  • Захожу иногда
  • 123
  • 0 / 0
Сообщение com_contact
« : 23.09.2014, 15:59:03 »
После отправки сообщения через форму компонента com_contact в конце появляется "Сообщение Сообщение отправлено" Я так понимаю слово Сообщение это системное уведомление. Скажите, как убрать это лишнее слово?
*

motokraft

  • Завсегдатай
  • 1326
  • 72 / 13
Re: Сообщение com_contact
« Ответ #1 : 23.09.2014, 16:19:02 »
вывод системных сообщений отвечает файл message.php (\libraries\joomla\document\html\renderer)

В этом файле с 57 по 76 строку формируется системное сообщение...

==================
JText::_( $type ) - отвечает за название системного сообщения...
$msg - выводит сам тест сообщения...
...
*

Aiden

  • Захожу иногда
  • 123
  • 0 / 0
Re: Сообщение com_contact
« Ответ #2 : 23.09.2014, 17:02:47 »
Хорошо. Но получается убрать все что угодно, кроме слова  <h2>Сообщение</h2>.

вывод системных сообщений отвечает файл message.php (\libraries\joomla\document\html\renderer)

В этом файле с 57 по 76 строку формируется системное сообщение...

==================
JText::_( $type ) - отвечает за название системного сообщения...
$msg - выводит сам тест сообщения...


Код: php
// If messages exist render them
if (is_array($lists))
{
// Build the return string
$contents .= "\n<dl id=\"system-message\">";
foreach ($lists as $type => $msgs)
{
if (count($msgs)) {
$contents .= "\n<dt class=\"".strtolower($type)."\">".JText::_( $type )."</dt>";
$contents .= "\n<dd class=\"".strtolower($type)." message fade\">";
$contents .= "\n\t<ul>";
foreach ($msgs as $msg)
{
$contents .="\n\t\t<li>".$msg."</li>";
}
$contents .= "\n\t</ul>";
$contents .= "\n</dd>";
}
}
$contents .= "\n</dl>";
}


*

motokraft

  • Завсегдатай
  • 1326
  • 72 / 13
Re: Сообщение com_contact
« Ответ #3 : 23.09.2014, 17:21:14 »
Хорошо. Но получается убрать все что угодно, кроме слова  <h2>Сообщение</h2>.

удалите строку!

Код
$contents .= "\n<dt class=\"".strtolower($type)."\">".JText::_( $type )."</dt>";
...
*

Aiden

  • Захожу иногда
  • 123
  • 0 / 0
Re: Сообщение com_contact
« Ответ #4 : 23.09.2014, 17:34:54 »
motokraft, Сообщение Остается. Если удалисть полностью

Код: php
// If messages exist render them
if (is_array($lists))
{
// Build the return string
$contents .= "\n<dl id=\"system-message\">";
foreach ($lists as $type => $msgs)
{
if (count($msgs)) {
$contents .= "\n<dt class=\"".strtolower($type)."\">".JText::_( $type )."</dt>";
$contents .= "\n<dd class=\"".strtolower($type)." message fade\">";
$contents .= "\n\t<ul>";
foreach ($msgs as $msg)
{
$contents .="\n\t\t<li>".$msg."</li>";
}
$contents .= "\n\t</ul>";
$contents .= "\n</dd>";
}
}

То удаляется все уведомления, в том числе присоединенного captcha плагина
*

motokraft

  • Завсегдатай
  • 1326
  • 72 / 13
Re: Сообщение com_contact
« Ответ #5 : 23.09.2014, 17:44:46 »
Вот как у меня формируется это сообщение
Код
$buffer .= '<div class="'.$text.'">';
$buffer .= '<a class="close" data-dismiss="alert">×</a>';
foreach ($msgs as $msg)
{
$buffer .= $msg;
}
$buffer .= '</div>';



И Вы мне будете загонять что у вас не так...
...
*

Aiden

  • Захожу иногда
  • 123
  • 0 / 0
Re: Сообщение com_contact
« Ответ #6 : 23.09.2014, 18:11:11 »
Ничего не понимаю, я конечно не профессионал Joomla, но на скриншоте вроде компонент com_user a речь про com_contact. При отправке через форму компонента com_contact в конце появляется "Сообщение Сообщение отправлено"
Ваша рекомендация убирает слово Сообщение при отправке?

*

motokraft

  • Завсегдатай
  • 1326
  • 72 / 13
Re: Сообщение com_contact
« Ответ #7 : 23.09.2014, 18:14:21 »
Ваша рекомендация убирает слово Сообщение при отправке?

так вроде речь об этом и идет...

Я так понимаю слово Сообщение это системное уведомление. Скажите, как убрать это лишнее слово?

...
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Re: Сообщение com_contact
« Ответ #8 : 23.09.2014, 18:25:05 »
а в папке шаблона/html/com_contact проверь файлы
*

altvvc

  • Давно я тут
  • 523
  • 23 / 0
Re: Сообщение com_contact
« Ответ #9 : 23.09.2014, 18:30:20 »
За вывод также отвечает шаблон system - лежит в папке templates. Рекомендую посмотреть. И конечно же можно все стили из system -перенести в основной шаблон и поправить.

Спойлер
[свернуть]

Во вложении шаблон сом контакт - можете положить в папку вашего шаблона если у вас Joomla 1.5

#system-message dt.error { display: none; } например скроет слово сообщение или иконку - уже не помню. просто со своего шаблона скопировал
« Последнее редактирование: 23.09.2014, 18:34:25 от altvvc »
Красота спасет мир, а пофигизм спасет нервы.
*

Aiden

  • Захожу иногда
  • 123
  • 0 / 0
Re: Сообщение com_contact
« Ответ #10 : 23.09.2014, 18:43:15 »
а в папке шаблона/html/com_contact проверь файлы

Шаблон простейший. Оказывается в index.php было

Код: php
     <?php if ($this->getBuffer('message')) : ?>
<div class="error">
<h2>

</h2>
<jdoc:include type="message" />
</div>



Всем спасибо за участие!
*

altvvc

  • Давно я тут
  • 523
  • 23 / 0
Re: Сообщение com_contact
« Ответ #11 : 23.09.2014, 19:19:12 »
Так ты полностью вырезал системные сообщения? :o
Красота спасет мир, а пофигизм спасет нервы.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

При вставке ссылок с лицевой стороны сайта получаю сообщение 404

Автор Irwein13

Ответов: 3
Просмотров: 1488
Последний ответ 16.05.2014, 17:43:57
от mark1
Тэг <legend>E-Mail</legend> в com_contact откуда берется?

Автор Шмайсер

Ответов: 12
Просмотров: 2888
Последний ответ 24.03.2012, 18:01:34
от real-man
[Решено] Новое поле в com_contact+joomla 1.5.11

Автор sawork

Ответов: 23
Просмотров: 8952
Последний ответ 25.11.2011, 16:44:17
от Aleks_El_Dia
Не отображается сообщение об удачной регистрации

Автор phuntonik

Ответов: 4
Просмотров: 1706
Последний ответ 07.11.2011, 20:25:38
от phuntonik
Сообщение после регистрации что на email отправлено письмо

Автор EvgeniyAL

Ответов: 4
Просмотров: 1590
Последний ответ 05.09.2011, 10:23:14
от EvgeniyAL