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

FIORD_CMS

  • Захожу иногда
  • 119
  • 3 / 0
У меня есть сомнения в работоспособности параметра "время жизни сессии", установленного в значение 30.
Почему возникли сомнения ? Я вижу, что некоторые зарегистрированные пользователи находятся в статусе online по нескольку дней, а число гостей (незарегистрированных) - сотни (во много раз больше, чем дают счетчики посещений). На основании этого я делаю вывод, что сессии для этих пользователей вообще не прерываются.

Не исключаю, что я чего-то не понимаю. Просьба помочь либо в понимании ситуации либо в ее решении. Спасибо.
« Последнее редактирование: 18.12.2016, 11:11:22 от FIORD_CMS »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Время жизни сессии не работает ?
« Ответ #1 : 16.12.2016, 16:12:55 »
например открыли вкладку в браузере, и не закрывают ее. сессия поддерживается автоматически при этом. 30 минут начнется после закрытия браузера. а число гостей - это боты, большинство из которых которых счетчики вообще не видят
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Re: Время жизни сессии не работает ?
« Ответ #2 : 16.12.2016, 16:44:21 »
Не вижу причин для паники, хотя доля правды, наверное, есть. Если я зашел на сайт - создается запись в таблице сессий и, собственно, сама сессия. Когда я в следующий раз я запрошу у сервера страницу, и при этом буду авторизован, эта запись просто обновится. Но есть один момент - PHP определяет, какую именно сессию нужно запустить, по имени куки, передаваемом браузером в заголовке запроса, либо по идентификатору сессии в адресной строке. Браузер же, в свою очередь, получает эту куку или идентификатор от сервера, куда его помещает функция session_start(). А теперь камень - если время жизни куки в браузере истекло, он не будет передан в запросе, а значит PHP не сможет определить, какую сессию нужно запустить, и расценит это как создание новой сессии. Таким образом в базе будут висеть открытые ранее сессии. И на высоконагруженных сайтах размер базы будет распухать пропорционально новым запросам к серверу.

Признаться, я не знаю, существует ли механизм удаления таких подвисших сессий, но, как задал вопрос ТС, он не работает. Поэтому самому было бы интересно разобраться в этом вопросе. Если не работает - можно написать плагин или просто отдельный скрипт, который будет запускаться по крону и чистить таблицу сессий по выставленным в админке критериям.
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Время жизни сессии не работает ?
« Ответ #3 : 16.12.2016, 16:46:41 »
таблица чистится автоматически.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Re: Время жизни сессии не работает ?
« Ответ #4 : 16.12.2016, 18:06:42 »
У юзеров еще хранится userid так что тут с дублями проблем нет, что же до гостей, лично авто очистики не видел, но проблем в распуханием таблицы до адовый размеров не было, так что думаю она все же есть.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Время жизни сессии не работает ?
« Ответ #5 : 16.12.2016, 18:11:50 »
есть есть, не сомневайтесь :) никаких проблем с сессиями в Joomla нет. да и ТС собственно про другое спрашивал.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Re: Время жизни сессии не работает ?
« Ответ #6 : 16.12.2016, 18:15:57 »
есть есть, не сомневайтесь :) никаких проблем с сессиями в Joomla нет. да и ТС собственно про другое спрашивал.
Нет проблемы есть. Просто они не на каждом сайте, да и не всегда. Помню обновил как-то сайт на 3.x + так он сессию не держал принципиально до сл. обновы.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Время жизни сессии не работает ?
« Ответ #7 : 16.12.2016, 18:20:08 »
это скорее проблемы индивидуальных особенностей конкретного сайта и конкретного обновления, а не проблемы Joomla :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Re: Время жизни сессии не работает ?
« Ответ #8 : 16.12.2016, 18:21:46 »
это скорее проблемы индивидуальных особенностей конкретного сайта и конкретного обновления, а не проблемы Joomla :)
Ну на сайте стоит Joomla и обновление Joomla + раньше работало = проблема Joomla
Хотя на самом деле с сесиями частенько проблемы, а писать их логику мозг разрывается.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Время жизни сессии не работает ?
« Ответ #9 : 16.12.2016, 18:53:38 »
ну ок :) я не спорю, само собой какие то проблемы могут возникать. но просто тут даже вопрос в другом у ТС
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

capricorn

  • Завсегдатай
  • 1949
  • 118 / 3
Re: Время жизни сессии не работает ?
« Ответ #10 : 16.12.2016, 19:34:01 »
это похоже на ожидаемое поведение Joomla для залогинившихся зарегистрированных пользователей которые находятся на странице со стандартной формой логина. если на другой то сессия должна окончиться.

JHtml::_('behavior.keepalive');

http://joomlaforum.ru/index.php?topic=147295.0
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Время жизни сессии не работает ?
« Ответ #11 : 16.12.2016, 21:16:20 »
Почему только
Цитировать
для залогинившихся зарегистрированных пользователей которые находятся на странице со стандартной формой логина
? Стандартно keepalive подключается в модуле логина. Т.е. если выведен модуль логина - то сессия поддерживается на любой странице где он выведен. Поддерживается она не только для залогинившихся, а для всех. Но очень часто keepalive подключается вообще кем угодно и где угодно. Например, некоторые интернет-магазины подключают его везде, чтобы товары в корзине не пропали после 15 стандартных минут. И т.д.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не работает мобильная версия сайта

Автор jeans

Ответов: 4
Просмотров: 1047
Последний ответ 21.05.2025, 12:44:06
от jeans
Не работает менеджер материалов, ошибка 500 SSL certificate problem

Автор Екатерина М

Ответов: 5
Просмотров: 1614
Последний ответ 06.04.2025, 09:27:20
от wishlight
Не работает капча

Автор Leo1986

Ответов: 4
Просмотров: 975
Последний ответ 16.09.2024, 09:15:28
от Leo1986
Не работает canonical

Автор Zegeberg

Ответов: 16
Просмотров: 1293
Последний ответ 25.09.2023, 17:28:04
от web1
Некорректно работает Яндекс Метрика из-за mootools

Автор web_signal

Ответов: 4
Просмотров: 2148
Последний ответ 21.06.2023, 23:25:14
от sivers