Новости 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 Ответов
  • 1404 Просмотров
*

palexa

  • Завсегдатай
  • 1108
  • 88 / 0
Публикую код в статьях, через плагин

Первый вариант для работы php
Код
{source}<?php JHTML::_('behavior.modal'); ?>{/source}

Второй вариант для вставки кода как текст
Код
<pre lang="php"><?php JHTML::_('behavior.modal'); ?></pre>

Ну уже замучился, редактор вырезает всё что связано с php

Как заставить  JCE не уничтажать код?
*

capricorn

  • Завсегдатай
  • 1949
  • 118 / 3
Re: Как заставить JCE не уничтажать код?
« Ответ #1 : 07.04.2018, 00:53:13 »
Кнопка sourcerer есть в JCE?

У меня все путем работает.

{source}
<!-- You can place html anywhere within the source tags -->


<script language="javascript" type="text/javascript">
// You can place JavaScript like this

</script>
<?php
echo "Hi"

?>
{/source}
Привет

https://www.zend-test.techtranslate247.ru/lorem-ipsum.html
« Последнее редактирование: 07.04.2018, 01:10:49 от capricorn »
*

palexa

  • Завсегдатай
  • 1108
  • 88 / 0
Re: Как заставить JCE не уничтажать код?
« Ответ #2 : 07.04.2018, 01:31:11 »
О!
Спасибо
Всё так просто +1

Код
{source}&lt;?php JHTML::_('behavior.modal'); ?&gt;{/source}

Код
<pre lang="php">&lt;?php JHTML::_('behavior.modal'); ?&gt;</pre>
*

palexa

  • Завсегдатай
  • 1108
  • 88 / 0
Re: Как заставить JCE не уничтажать код?
« Ответ #3 : 09.04.2018, 11:05:59 »
Ну оказывается не совсем просто

С {source} разобрались, акм кнопка делает как надо

А вот с <pre lang="php"> </pre> всё не так просто, если код сложный, то всё вырезается и портится

особенно если <pre lang="html">

Как можно заставить редактор не трогать то, что я всталяю между тегами

<pre lang="HTML"> НЕ трогать код</pre>
*

palexa

  • Завсегдатай
  • 1108
  • 88 / 0
Re: Как заставить JCE не уничтажать код?
« Ответ #4 : 10.04.2018, 15:20:54 »
Ну как бы поверхностно разобрался, для начала профиль редактора в параметрах редактора - расширенные
Разрешить PHP - тогда код PHP не будет удалятся редактором
Теперь если написать
Код
<pre lang="php"><?php switch ($this->getlanguage()){
  case 'ru-ru':?> <a href="<?php echo $document->baseurl; ?>/">текст</a> &lt;?php
</pre>

То всё как бы хорошо

Но вот если написать
Код
<pre lang="html4strict"><p>текст</p></pre>
Редактор удалит <pre lang="html4strict"> и </pre> - оставит только HTML

А если написать так
Код
<pre lang="html4strict"><a href="/images/404.png" class="modal" title="моя супер картинка"><img src="images/404-min.png" alt="ошибка 404" /></a></pre>
Ничего не удалит

В общем умный редактор

Можно конечно в параметрах Исправлять HTML - указать нет и тогда всё ок

Но хотелось бы оставить Исправлять HTML  - указать да

Как и где добавить в исключение тег pre, что бы не удаляло его и то что внутри него?


Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как заставить работать JCE MediaBox?

Автор didika

Ответов: 10
Просмотров: 16813
Последний ответ 11.12.2020, 11:44:55
от Cyberneer
Как заставить JCE отображать путь к картинке не относительный а абсолютный!

Автор bicka

Ответов: 5
Просмотров: 3395
Последний ответ 26.03.2012, 19:25:37
от Gnusmas