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

..С...е...р...ы...й..

  • Захожу иногда
  • 51
  • 110 / 2
Как получить значение - session_id - есть такая переменная?
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
насчет session_id не знаю, а вот так не пойдет?
Код: php
print_r($_SESSION);

В всяком случае time там передается
« Последнее редактирование: 03.08.2009, 20:23:47 от beliyadm »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

..С...е...р...ы...й..

  • Захожу иногда
  • 51
  • 110 / 2
к сожалению нето, мне требуется из таблицы jos_session получить значение поля session_id
там оно в таком виде: h78542me125uka8abeskeqij24
*

..С...е...р...ы...й..

  • Захожу иногда
  • 51
  • 110 / 2
тоесть получается, что у каждого зарегистрированого пользователя есть свой уникальный userid, то у гостей единственный уникальный идентификатор только значение session_id
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
для гостя создается кука с уникальным именем, значением которой как раз является session_id из таблицы jos_session
но как получить значение куки при постоянно меняющимся имени - не знаю
Если только запросом в БД по какому-нибудь элементу массива $_SESSION - но это некрасиво
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Adeptus

  • Завсегдатай
  • 1861
  • 219 / 15
у гостей единственный уникальный идентификатор только значение session_id

Боюсь, что нет...
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
нашел (поиск по форуму все таки рулит)
Код: php
$session =& JFactory::getSession();
$session_id=$session->getID();
echo $session_id;
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Adeptus

  • Завсегдатай
  • 1861
  • 219 / 15
нашел (поиск по форуму все таки рулит)

Если (как я предполагаю) земля роется в направлении идентифицировать с помощью этого Гостей - то нифига не выйдет...
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Если (как я предполагаю) земля роется в направлении идентифицировать с помощью этого Гостей - то нифига не выйдет...
нет конечно, чтобы отловить гость или нет достаточно объекта
Код: php
$user =& JFactory::getUser();
А вот если хотим что-то делать с текущим гостем в пределах его сессии - оно самое
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Adeptus

  • Завсегдатай
  • 1861
  • 219 / 15
А вот если хотим что-то делать с текущим гостем в пределах его сессии - оно самое

Каким образом, хотелось бы знать?  :o
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Каким образом, хотелось бы знать?  :o
думаю лучше спросить Волка, зачем оно ему понадобилось
Он хотел узнать значение поля session_id из таблицы session для текущего юзверя - я нашел и написал как
Уж куда он дальше будет его вертеть - не моя задача :)
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

userxp

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

Adeptus

  • Завсегдатай
  • 1861
  • 219 / 15
вы вообще про какую Joomla говорите?

Ну если

Код
$session =& JFactory::getSession();

то про какую? :)
*

..С...е...р...ы...й..

  • Захожу иногда
  • 51
  • 110 / 2
о спасибо всем, теперь есть уже что то...

дело такое: в одном компоненте есть такая функция "add to favorites" - но она работает только для авторизированых, если гость пытается её использовать то ему предлагается авторизация.
я просто хотел переделать, чтоб вместо проверки userid проверялась session_id -тогда по идее могли бы гости её юзать.
на одном сайте видел реализацию цэго на cookies, но увы джумлакомпоненты все сделаны с расчетом чтобы их допиливали.
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
то про какую? :)
С.е.р.ы.й.В.о.л.к ни разу не упомянул про версию.
beliyadm упомянул про вариант с 1.5 по собственной инициативе.

вот я и спрашиваю - так вы про какую джумлу-то?
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

..С...е...р...ы...й..

  • Захожу иногда
  • 51
  • 110 / 2
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
сорри, давно уже по умолчанию Joomla 1.5
дефолтсити :) (== Москва) :):):)
Ты скажи - решение то что хотел или нет?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
тогда я буду в режиме "по-умолчанию" ;D ;D ;D
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

..С...е...р...ы...й..

  • Захожу иногда
  • 51
  • 110 / 2
*

Adeptus

  • Завсегдатай
  • 1861
  • 219 / 15
оно самое  :D

Предрекаю: без JS ниче не выйдет :)
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Предрекаю: без JS ниче не выйдет :)
а причем тут JS, для какой задачи?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Adeptus

  • Завсегдатай
  • 1861
  • 219 / 15
а причем тут JS, для какой задачи?

Ну написал же Серый - Адд ту фаворитес...
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Ну написал же Серый - Адд ту фаворитес...
ааа, ну теперь я туплю :)
действительно - мало ли где может понадобиться, например чтобы отслеживать товары в самописной корзине в пределах сессии, имя пользователя в чате, ручной компонент снятия статистики перемещения пользователей по сайту - вариаций масса
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Adeptus

  • Завсегдатай
  • 1861
  • 219 / 15
Еще раз высказываю сомнение:

идентифицировать Гостей по сессии не получится.
*

..С...е...р...ы...й..

  • Захожу иногда
  • 51
  • 110 / 2
Ну написал же Серый - Адд ту фаворитес...

там эта функция подобна корзине, тоесть эти "add to favorites" - не закладки избранное браузера, (если не правильно поняли)
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
идентифицировать Гостей по сессии не получится.
тогда давайте аргументировать.
Как же тогда работает 99% интернет магазинов, не требующих регистрации но отслеживающих перемещение гостей по сайту, их корзину, тут же после авторизации слияние с данными зарегистрированного пользователя и прочие фишки как не по сессии?
Кука же живет - живет, вот мы её и используем.
Или я чего-либо не понимаю в этом чате?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Adeptus

  • Завсегдатай
  • 1861
  • 219 / 15
там эта функция подобна корзине, тоесть эти "add to favorites" - не закладки избранное браузера, (если не правильно поняли)

Только через кукисы.
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Только через кукисы.
так в кукисах значение session_id и лежит
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Adeptus

  • Завсегдатай
  • 1861
  • 219 / 15
так в кукисах значение session_id и лежит

Тю. В пределах одной сессии?

Так это за ради Бога...

При следующем заходе все потеряется, зато таблица с сохраненными данными очень быстро переполнится хламом...
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Тю. В пределах одной сессии?
При следующем заходе все потеряется, зато таблица с сохраненными данными очень быстро переполнится хламом...
а никто и не говорит что с этим надо работать долгие века.
Обычно юзер зашел, через 15 минут положил товар в корзину, через 5 оформил платеж - все, либо сохраняем его данные в отдельную таблицу и убиваем куку либо просто убиваем и ничего не храним
Суть задачи в том, что эти данные нужно использовать в достаточно ограниченный промежуток времени, не более
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не могу получить cookie. Что не так?

Автор denism300

Ответов: 3
Просмотров: 631
Последний ответ 06.12.2022, 10:21:27
от sivers
Баг. В модуле выводится значение параметра из другого модуля

Автор fbr

Ответов: 10
Просмотров: 927
Последний ответ 18.04.2021, 21:34:10
от fbr
Как получить объект с полной информацией о материале через API Joomla? [РЕШЕНО]

Автор dm-krv

Ответов: 4
Просмотров: 1269
Последний ответ 03.08.2019, 16:30:51
от dm-krv
Как получить концовку url?

Автор dm-krv

Ответов: 12
Просмотров: 802
Последний ответ 05.10.2018, 22:23:31
от Fedor Vlasenko
Конфликт bs3 и juqery из ядра, если на странице есть breadcrump

Автор AlekVolsk

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