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

tmpnikl

  • Захожу иногда
  • 497
  • 4 / 0
Создаю материал
Спойлер
[свернуть]

На сайте нажимаю подробнее, нажимаю на ссылку, и после алерта попадаю на главную страницу сайта, как остаться на текущей странице?
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Re: Как остаться на текущей странице?
« Ответ #2 : 14.12.2016, 10:14:17 »
Код
<a href="/" onClick="hello();return false;">бла-бла</a>
Но это все равно не комильфо . Нужно отделять поведение от структуры .
*

tmpnikl

  • Захожу иногда
  • 497
  • 4 / 0
Re: Как остаться на текущей странице?
« Ответ #3 : 14.12.2016, 11:01:53 »
Спасибо, <a href="#" помогло.
По правде говоря я не совсем понял фразу "... Нужно отделять поведение от структуры . "
на сайте есть ссылка, на которую нажимает посетитель сайта, после этого запускается функция, которая должна передать в MySQL для поиска в таблице залогиневшегося пользователя...
Я в первый раз столкнулся с этим, естественно времени нет для систематического изучения, как всё это делается, готовых примеров тоже... поэтому методом тыка нащупываем более-менее оптимальный подход... Сейчас, когда функция заработала, буду подключать библиотеку AJAX, чтоб передать массив POST, но и опять же буду спрашивать на форумах, какой лучше AJAX гугловсий или в Joomla уже есть, или надо скопировать в шаблон... вопросов много, т.к. практики нет.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Re: Как остаться на текущей странице?
« Ответ #4 : 14.12.2016, 11:20:40 »
Чур не кидаться камнями но
href="javascript:void(0)" Ну или return: false
Ибо # это якорь верха страницы.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Re: Как остаться на текущей странице?
« Ответ #5 : 14.12.2016, 12:02:54 »
буду подключать библиотеку AJAX, чтоб передать массив POST,
какой лучше AJAX гугловсий или в Joomla уже есть, или надо скопировать в шаблон...
что?

по теме: Event.preventDefault()
Веб-разработка: заказ. Только новая разработка.
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Re: Как остаться на текущей странице?
« Ответ #6 : 14.12.2016, 12:28:05 »
По правде говоря я не совсем понял фразу "... Нужно отделять поведение от структуры . "
на сайте есть ссылка, на которую нажимает посетитель сайта, после этого запускается функция, которая должна передать в MySQL для поиска в таблице залогиневшегося пользователя...
Если AJAX , то и ссылка не нужна. Создать обычный элемент, и написать обработчик события click
Код
$(function(){
jQuery('.button_send').on('click', function(){
var socuser_login = jQuery('#socuser_login').val(); // здесь получить id юзера
// Проверяем заполненность обоих полей
if (socuser_login)
{
// Отправляем асинхронный запрос на страницу, на которой будет происходить отправка данных
jQuery.post(
'/ajax/send_message.php',
{SOCUSER_LOGIN:socuser_login},
function ( data )
{
jQuery( '.sendMessage' ).text( data );
jQuery( '.sendMessage' ).show();
}
);
}
});
});
И потом показать сообщение в элементе страницы
Код
<p class=".sendMessage">здесь будет ответ от скрипта</p>
« Последнее редактирование: 14.12.2016, 12:34:18 от draff »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Toggle не работает на главной странице

Автор illimited

Ответов: 5
Просмотров: 813
Последний ответ 18.11.2022, 20:11:41
от illimited
Как написать программу для выполнения действий на сайте (веб-странице)?

Автор oskokos

Ответов: 3
Просмотров: 1570
Последний ответ 04.05.2018, 12:46:28
от oskokos
if (mail()) на текущей странице

Автор dm-krv

Ответов: 5
Просмотров: 877
Последний ответ 01.08.2017, 22:16:29
от ProtectYourSite
[Решено] Не работает скрипт на странице Joomla 3

Автор Mick_20

Ответов: 5
Просмотров: 1930
Последний ответ 17.11.2016, 17:01:28
от Mesuti
Конфликт bs3 и juqery из ядра, если на странице есть breadcrump

Автор AlekVolsk

Ответов: 2
Просмотров: 2654
Последний ответ 26.07.2014, 20:08:49
от AlekVolsk