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

Agentus2005

  • Осваиваюсь на форуме
  • 32
  • 0 / 1
  • Улыбнитесь!
Здравствуйте однофорумчане!  ;)
--
Вставляю код Java-календаря в модуль произвольного HTML - кода и при Сохранении изменений, содержимое кода полностью удаляется.
Подскажите пожалуйста как заставить модуль обрабатывать Java Script.  :(
Код
<html>
<head>
<title>Календарь</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<style type="text/css">
<!--
body
{background-color:#FAFDFF; margin:0px; padding:0px; font-size:12px; color:#000; font-family:Arial, Helvetica, sans-serif;}
b
{color:#00008B}
.promo
{color:#AF0032; font-size:12px; text-align:center;  margin-top:20px}
.promo a:link, .promo a:visited, .promo a:hover {color:#0066CC; text-decoration:underline;}
-->
<!-- web-mastery.info  -->
</style>
</head>
 
<body>
<br>
<br><br>
<CENTER>
 
<SCRIPT LANGUAGE="JavaScript">
 
<!-- Begin
monthnames = new Array(
"Январь",
"Февраль",
"Март",
"Апрель",
"Май",
"Июнь",
"Июль",
"Август",
"Сентябрь",
"Октябрь",
"Ноябрь",
"Декабрь");
var linkcount=0;
function addlink(month, day, href) {
var entry = new Array(3);
entry[0] = month;
entry[1] = day;
entry[2] = href;
this[linkcount++] = entry;
}
Array.prototype.addlink = addlink;
linkdays = new Array();
monthdays = new Array(12);
monthdays[0]=31;
monthdays[1]=28;
monthdays[2]=31;
monthdays[3]=30;
monthdays[4]=31;
monthdays[5]=30;
monthdays[6]=31;
monthdays[7]=31;
monthdays[8]=30;
monthdays[9]=31;
monthdays[10]=30;
monthdays[11]=31;
todayDate=new Date();
thisday=todayDate.getDay();
thismonth=todayDate.getMonth();
thisdate=todayDate.getDate();
thisyear=todayDate.getYear();
thisyear = thisyear % 100;
thisyear = ((thisyear < 50)? (2000 + thisyear) : (1900 + thisyear));
if (((thisyear % 4 == 0)
&& !(thisyear % 100 == 0))
||(thisyear % 400 == 0)) monthdays[1]++;
startspaces=thisdate;
while (startspaces > 7) startspaces-=7;
startspaces = thisday - startspaces + 1;
if (startspaces < 0) startspaces+=7;
document.write("<table border=2 bgcolor=white ");
document.write("bordercolor=black><font color=black>");
document.write("<tr><td colspan=7><center><strong>"
+ monthnames[thismonth] + " " + thisyear
+ "</strong></center></font></td></tr>");
document.write("<tr>");
document.write("<td align=center>Вс</td>");
document.write("<td align=center>Пн</td>");
document.write("<td align=center>Вт</td>");
document.write("<td align=center>Ср</td>");
document.write("<td align=center>Чт</td>");
document.write("<td align=center>Пт</td>");
document.write("<td align=center>Сб</td>");
document.write("</tr>");
document.write("<tr>");
for (s=0;s<startspaces;s++) {
document.write("<td> </td>");
}
count=1;
while (count <= monthdays[thismonth]) {
for (b = startspaces;b<7;b++) {
linktrue=false;
document.write("<td>");
for (c=0;c<linkdays.length;c++) {
if (linkdays[c] != null) {
if ((linkdays[c][0]==thismonth + 1) && (linkdays[c][1]==count)) {
document.write("<a href=\"" + linkdays[c][2] + "\">");
linktrue=true;
      }
   }
}
if (count==thisdate) {
document.write("<font color='FF0000'><strong>");
}
if (count <= monthdays[thismonth]) {
document.write(count);
}
else {
document.write(" ");
}
if (count==thisdate) {
document.write("</strong></font>");
}
if (linktrue)
document.write("</a>");
document.write("</td>");
count++;
}
document.write("</tr>");
document.write("<tr>");
startspaces=0;
}
document.write("</table></p>");
// End -->
</SCRIPT>
</CENTER>
</body>

И такая же ситуация с информером погоды  :(
Код
<style type='text/css'>
.gmtbl {background-color: #ffffff; border: 1px solid #18b8f9;}
.gmtdttl {font-size: 110%; font-weight: bold;color: #ffffff; text-align:center; background-color: #18b8f9;}
.gmtdtext {font-size: 100%; font-weight: normal; color: #000000;text-align:center;}
.tddiv { text-align: left !important;}
div#cntdiv{ position:absolute; display:block;}
div#infselectlist{ background-color: #ffffff; border: 1px solid #7c7c7c; width:100%; height:100%; position:relative; top:1; left:0; right:0; visibility:hidden; cursor:pointer;}
div#hiddentl{ position:relative; top:1; left:0; right:0; visibility:hidden;}
</style>

<script language='JavaScript' type='text/javascript' src='http://informer.gismeteo.ru/html/js/showtlist_new.js'></script>
<script language='JavaScript' type='text/javascript' src='http://informer.gismeteo.ru/html/js/ldata_new.js'></script>
<table border=0 width=200><tr><td>
<div id='informer2'></div>
<div id='infscript' style='visibility:hidden'></div>
<script language='JavaScript' type='text/javascript'src='http://informer.gismeteo.ru/html/2.php?tnumber=1&city0=4368%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&codepg=utf-8&par=4&inflang=rus&domain=ru&vieinf=2&p=1&w=1&tblstl=gmtbl&tdttlstl=gmtdttl&tdtext=gmtdtext&new_scheme=1'></script>
</td></tr></table>
--
Заранее спасибо  ;)
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
на время вставки кода отключите для пользователя (в его настройках) использование визуального редактора (сам всегда так делаю)
Либо используйте модули типа mod_php для вставки js\php кода в тело модуля
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Agentus2005

  • Осваиваюсь на форуме
  • 32
  • 0 / 1
  • Улыбнитесь!
Спасибо огромное, вопрос решен! Ваш совет очень мне помог!  yes!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Sp page builder. Вопрос по аддону "feature box"

Автор elmama

Ответов: 7
Просмотров: 3610
Последний ответ 02.04.2022, 08:37:52
от elmama
Как убрать ограничение количества символов в html модуле?

Автор Bozhkov2

Ответов: 2
Просмотров: 1131
Последний ответ 05.11.2020, 14:48:38
от Bozhkov2
Вопрос по плагину Very Simple Image Gallery ??

Автор akteon25

Ответов: 0
Просмотров: 894
Последний ответ 13.10.2020, 17:43:04
от akteon25
Вопрос об обновлении расширений к разработчикам

Автор IWSBY

Ответов: 0
Просмотров: 808
Последний ответ 07.08.2020, 16:09:30
от IWSBY
Speed Cache - вопрос по настройке и работе

Автор Craze

Ответов: 3
Просмотров: 1474
Последний ответ 21.10.2019, 13:34:34
от Craze