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

vertr

  • Новичок
  • 8
  • 0 / 0
Название товара в Opera 9
« : 09.11.2007, 20:48:26 »
Названия товаров в опере9 и Firefox наезжают на картинки, а в IE6 всё в порядке.
подскажите как исправить эту ошибку.
*

vertr

  • Новичок
  • 8
  • 0 / 0
Re: Название товара в Opera 9
« Ответ #1 : 09.11.2007, 23:44:36 »
Всё проблему решил. Тему можно закрывать.
*

Myst

  • Осваиваюсь на форуме
  • 44
  • 0 / 0
Re: Название товара в Opera 9
« Ответ #2 : 12.11.2007, 11:31:42 »
а как решил? у меня тоже самое, плз.
*

amiko

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Название товара в Opera 9
« Ответ #3 : 13.11.2007, 00:32:25 »
это зависит от верстки шаблона вывода товара по умолчанию он сделан div'ами,  по ряду причин ) разные броузеры имеют особенность по своему воспринимать их.

я переверстал свои шаблоны в таблицы, может и не самое профессиональное решение зато 100% везде одинаково и без наездов.

к примеру: /www/administrator/components/com_virtuemart/html/templates/browse
browse_1.php
Код
<table width="500" border="0">
<tr>
<td colspan="2" valign="top" align="left">
<h3><a title="{product_name}" href="{product_flypage}">{product_name}</a></h3>
</td>
</tr>
<tr>
<td width="160" valign="top" align="left">
<a href="{image_url}product/{product_full_image}" target="_blank" title="{product_name}"><img src="{product_thumb_image}" {image_height} {image_width} border="0" title="{product_name}" alt="{product_name}" /></a>
</td>
<td width="340" valign="top" align="left">
{product_s_desc}&nbsp;
<br/><a href="{product_flypage}" title="{product_details...}">{product_details...}...</a>
</td>
</tr>
<tr>
<td valign="top" align="left">
Цена:{product_price}
</td>
<td valign="top" align="left">
 {form_addtocart}
</td>
</td>
</table>

и файл вывода описания подробного
www/administrator/components/com_virtuemart/html/templates/product_details
flypage.php
Код
<br/>
<table border="1" style="width: 100%;">
  <tbody>
<tr>
  <td rowspan="4" valign="top" style="text-align:center;"><br/>{product_image}<br/><br/>{more_images}</td>
  <td rowspan="1" colspan="2">
  <h1>{product_name} {edit_link}</h1>
  </td>
</tr>
<tr>
  <td rowspan="1" colspan="2"><br /></td>
</tr>
<tr>
      <td width="33%" valign="top" align="left">{product_price}<br /></td>
      <td valign="top">{product_packaging}<br /></td>
</tr>
<tr style="font-style: italic;">
  <td rowspan="1" colspan="2"><hr />{product_description}<br/><span style="font-style: italic;">{file_list}</span></td>
</tr>
<tr>
  <td>{product_availability}<br /></td>
  <td colspan="2"><br />{addtocart}</td>
</tr>
<tr>
  <td colspan="3"></td>
</tr>
<tr>
  <td colspan="3"><hr />{product_reviews}</td>
</tr>
<tr>
  <td colspan="3">{product_reviewform}<br /></td>
</tr>
<tr>
  <td colspan="3">{related_products}<br /></td>
</tr>
<tr>
  <td colspan="3"><div style="text-align: center;"><br /></div><br /></td>
</tr>
  </tbody>
</table>
{navigation_childlist}<br style="clear:both"/>

*

Myst

  • Осваиваюсь на форуме
  • 44
  • 0 / 0
Re: Название товара в Opera 9
« Ответ #4 : 13.11.2007, 14:13:10 »
спасибо, попробую :-)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться