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

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Здравствуйте

Есть потребность быстро переключаться между различными дизайнами сайта, в которых фоновые изображения ссылок имеет различные картинки. Это можно осуществить более простым способом, чем инсталированием другого шаблона?
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
можно. напишите подробней че вы хотите, чета я не понял...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
можно. напишите подробней че вы хотите, чета я не понял...
Например, здесь http://www.svadbamorkov.ru/ необходимо менять облака, которые являются фоном ссылок, каким либо переключателем в менеджере шаблонов.
Наверно это надо стили шаблона настраивать? Как?
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
А обязательно переключалка нужна?
Можно например в параметрах модуля меню добавлять суффикс класса меню, например " clouds"
и в файле с CSS прописать .clouds li{background: url(../images/cloud.png)}
И аналогично создать другие классы.
Можно сделать и с переключалкой. Прописать в templateDetails.xml новое поле в секцию параметров. А в шаблоне подтягивать значение как $this->params->get('myField', 'defaultValue');
И например подставлять его как класс div'а, оборачивающего меню. Или даже прямо тегу body
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
А обязательно переключалка нужна?
Можно например в параметрах модуля меню добавлять суффикс класса меню, например " clouds"
и в файле с CSS прописать .clouds li{background: url(../images/cloud.png)}
И аналогично создать другие классы.

Можно сделать и с переключалкой. Прописать в templateDetails.xml новое поле в секцию параметров. А в шаблоне подтягивать значение как $this->params->get('myField', 'defaultValue');
И например подставлять его как класс div'а, оборачивающего меню. Или даже прямо тегу body

Да переключалка нужна для собственника сайта, чтобы понятнее и проще было. Попробую. Благодарю
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
что-то у меня неправильно, не открывается стиль шаблона.
Вот что я добавил в xml:
Код
	<config>
<fields name="params">
<fieldset name="advanced">
<field name="cloudtype" type="list" default="cloud_original"
label="CloudSelector"
description="Выберите тип облаков"
filter="word">
<option value="cloud_original">золотисто-голубые</option>
<option value="cloud_animated">мультяшные</option>
<option value="cloud_glossy">голубые глянцевые</option>
</field>


</fieldset>
</fields>
</config>

а вот что добавил в index.php:
Код
<?php
defined('_JEXEC') or die;
$app = JFactory::getApplication();
// get params
$cloud_class = $this->params->get('cloudtype');?>

...
<div id="topnav" class="<?php echo $cloud_class; ?>">
...

Где ошибка?
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Может эта статья поможет
Благодарю, задумка другая у меня.
Оказывается все от русского текста в templateDetails.xml в разделе определения параметров, а там в description="Choose a cloud type" (здесь у меня было по-русски) у моего параметра

То есть русскими можно только через файл русификации выводить?
« Последнее редактирование: 10.03.2012, 15:16:05 от borro »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
То есть русскими можно только через файл русификации выводить?
Не обязательно. Просто сохраняй файл в кодировке utf-8 (без BOM)
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться