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

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Если документ не в шаблоне?

У меня есть IFRAME, в котором грузится отдельная страничка.
Как в ней проверить, залогинился ли пользователь?

вот страница, чтобы было наглядно: http://new.kaskadnn.ru
там сверху форма с фреймом, разворачивается по нажатию на ссылку "Форма заказа РВД"

Помогите, пожалуйста, советом.
Я помог вам? Ткните в карму.
*

dako

  • Захожу иногда
  • 103
  • 2 / 2
Ну можно посмотреть через админку а можно поставить модель на сайн "кто онлайн" по  имеам
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
никак, если это отдельный документ подгружаемый со стороны.
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
dako, вы не поняли.
Мне нужно чтобы это определил скрипт, и в зависимости от результата выдал: требование о регистрации или форму заказа
« Последнее редактирование: 01.07.2009, 08:31:02 от d0ublezer0 »
Я помог вам? Ткните в карму.
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Mitrich, документ мой. грузится с моего сайта. просто не во фреймфорке Joomla.
Я помог вам? Ткните в карму.
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
потому и не получится.
Iframe - это абсолютно новый документ с точки зрения браузера.
соотв., там не будет присутствовать сессия от Joomla и как результат - регистрация пользователя.
тем более, что там не загружается API
единственный вариант - передать в строку URL фрейма некий указатель зарегистрированного пользователя.
но если вам нужно защищенное приложение, то это категорически не подойдет
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
единственный вариант - передать в строку URL фрейма некий указатель зарегистрированного пользователя.
но если вам нужно защищенное приложение, то это категорически не подойдет
Да, я так и подумал, что вряд ли по другому получится.
Дублировать сессию Joomla или передать её во фрейм - нереально?

Что касается защищенности приложения - это не пентагон, конечно.
Но, в принципе, чем надежнее, тем лучше.
Пока сделаю на передаче через GET в URL фрейма, но всё же продолжаю искать другие варианты.
Если будут идеи, пожалуйста напишите.
Я помог вам? Ткните в карму.
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
Или попробовать не через IFRAME а как то иначе
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Или попробовать не через IFRAME а как то иначе
Не вижу других вариантов
Я помог вам? Ткните в карму.
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
Возможно, AJAX, но для меня это темный лес.
Я помог вам? Ткните в карму.
*

d0ublezer0

  • Захожу иногда
  • 356
  • 31 / 0
  • Javaхарлал Неру
В общем, сделал так
    $user = & JFactory::getUser();
    if ($user->get('guest') == '1') { просто не показываем IFRAME }

Я помог вам? Ткните в карму.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Лог входа пользователей в систему

Автор Vasja555

Ответов: 1
Просмотров: 1759
Последний ответ 04.03.2015, 22:18:18
от voland
Посоветуйте систему Лайков для сайта?

Автор Mesuti

Ответов: 0
Просмотров: 1680
Последний ответ 02.12.2014, 06:51:09
от Mesuti
Авторизирован ли пользователь

Автор Tyoma5891

Ответов: 0
Просмотров: 1301
Последний ответ 25.10.2013, 10:24:32
от Tyoma5891
Как проверить на сайте(во фронтенде) что пользователь авторизован в админке?

Автор tolian_27

Ответов: 2
Просмотров: 1488
Последний ответ 15.08.2013, 16:06:03
от tolian_27
Как в Joomla 1.5.25 сделать чтобы пользователь мог добавлять материалы?

Автор Wargoth

Ответов: 4
Просмотров: 1753
Последний ответ 13.05.2013, 15:06:01
от Wargoth