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

astinasty

  • Захожу иногда
  • 68
  • 0 / 0
нужен редирект на определенную страницу(url) при заходе со определенного пула IP
как сделать проще всего?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Код: php
if(in_array($_SERVER['REMOTE_ADDR'], $arrayIPaddress)){header('Location: http://your_redirect.com');}
*

astinasty

  • Захожу иногда
  • 68
  • 0 / 0
Код: php
if(in_array($_SERVER['REMOTE_ADDR'], $arrayIPaddress)){header('Location: http://your_redirect.com');}

где это прописать?а если редирект нужен при доступе на весь домен?т.е при заходе с заданного пула IP, человек будет попадать на заданный мной URL
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Где угодно, можете в index.php в корне сайта.
*

astinasty

  • Захожу иногда
  • 68
  • 0 / 0
спасибо!
буду сейчас думать как впихнуть туда пул адресов, а не конкретный IP
*

IzrA

  • Захожу иногда
  • 322
  • 27 / 0
$arrayIPaddress - это и есть массив с вашим пулом.
Спасибо для меня слишком много. Стакан вина Плюс в репутацию - в самый раз.

Велосипедист — бедствие для экономики. Он не покупает автомобиля и не берет под него кредит. Не покупает бензин. Не пользуется услугами ремонтных мастерских. Не страхует «гражданскую ответственность». Не пользуется платными стоянками. Не страдает от ожирения. Да он еще и здоров, черт возьми! Здоровые люди не нужны для экономики. Они не покупают лекарства. Они не ходят к частным врачам. Они не увеличивают ВВП.
*

astinasty

  • Захожу иногда
  • 68
  • 0 / 0
выдает :
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/ХХХХ/ХХХХ/ХХХХ/index.php:2) in /var/www/ххх/public_html/ХХХХ/libraries/joomla/session/session.php on line 658
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Что выдает? Что и куда вы написали?
*

astinasty

  • Захожу иногда
  • 68
  • 0 / 0
Что выдает? Что и куда вы написали?
можно вам в личку написать, чтобы тут не писать имя сайта ?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Имя сайта мне не нужно, я спрашивал в каком файле, что вы написали, какая ошибка выскакивает.
*

astinasty

  • Захожу иногда
  • 68
  • 0 / 0
при заходе на сайт, он открывается, но вверху написано "Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/ХХХХ/ХХХХ/ХХХХ/index.php:2) in /var/www/ххх/public_html/ХХХХ/libraries/joomla/session/session.php on line 658"

вставил "if(in_array($_SERVER['XXXXX'], $arrayIPaddress)){header('Location: http://xxxxx.ru');} " в файл index.php в самом корне(не в шаблонах)
*

IzrA

  • Захожу иногда
  • 322
  • 27 / 0
Цитировать
$_SERVER['XXXXX']
А почему вместо REMOTE_ADDR у вас XXXXX?

REMOTE_ADDR это элемент суперглобального массива $_SERVER, в котором содержится айпишник клиента запросившего скрипт

Цитировать
файл index.php в самом корне(не в шаблонах)
Попробуйте всё же в index.php шаблона.
« Последнее редактирование: 04.08.2015, 17:13:11 от IzrA »
Спасибо для меня слишком много. Стакан вина Плюс в репутацию - в самый раз.

Велосипедист — бедствие для экономики. Он не покупает автомобиля и не берет под него кредит. Не покупает бензин. Не пользуется услугами ремонтных мастерских. Не страхует «гражданскую ответственность». Не пользуется платными стоянками. Не страдает от ожирения. Да он еще и здоров, черт возьми! Здоровые люди не нужны для экономики. Они не покупают лекарства. Они не ходят к частным врачам. Они не увеличивают ВВП.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
И не видно где вы инициализировали массив $arrayIPaddress, он у вас вообще есть?
*

astinasty

  • Захожу иногда
  • 68
  • 0 / 0
я где-то туплю в синтаксисе..
можете написать пример, чтобы перекидыал IP 123.11.11.15 на сайт  abc.ru ?

спасибо!
*

capricorn

  • Завсегдатай
  • 1949
  • 118 / 3
Если с 80-го порта то так можно попробовать в .htaccess:
 
Код
RewriteEngine On
RewriteCond %{HTTP_HOST} ^123.11.11.15$ [NC,OR]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ http://abc.ru/$1 [R=301,L]
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Или в php
Код: php
$arrayIPaddress = array(
    '123.11.11.15',
    '123.11.11.16',
    '123.11.11.17',
);
if(in_array($_SERVER['REMOTE_ADDR'], $arrayIPaddress)){header('Location: http://your_redirect.com');}
*

astinasty

  • Захожу иногда
  • 68
  • 0 / 0
Как же приятно, когда человек ПРОФИ и при этом делится знаниями!!Все работает!Спасибо и плюс Вам в карму!!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как правильно вписать редирект 301?

Автор Ebelous

Ответов: 76
Просмотров: 4982
Последний ответ 28.08.2020, 21:11:56
от Ebelous
Не работает редирект на другие сайты

Автор Андрей54

Ответов: 3
Просмотров: 1159
Последний ответ 10.08.2018, 10:34:40
от lexxbry
Как создать страницу подкладку? на сайт?

Автор bb777

Ответов: 5
Просмотров: 1029
Последний ответ 26.04.2018, 18:41:49
от bb777
Рефф ссылки на каждую страницу?

Автор magastom89

Ответов: 6
Просмотров: 1508
Последний ответ 16.01.2015, 14:38:38
от magastom89
[Решено] Прокрутить страницу вниз

Автор AlekVolsk

Ответов: 23
Просмотров: 11034
Последний ответ 17.03.2014, 22:27:04
от AlekVolsk