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

Kuzmitch

  • Захожу иногда
  • 150
  • 7 / 0
Проблема первая. Карты сайта.
http://site.ru/sitemap.xml
Чем сделать файл карты сайта, чтобы файл генерировался автоматически, и лежал в корне сайта с именем "sitemap.xml"
Есть что-то кроме Xmap, чтобы генерировать нормальную карту ? Или как сделать чтобы у карты Xmap была нормальная ссылка вида //сайт/sitemap.xml

Проблема вторая. Страница ошибки.
Все знают что Joomla показывает одну страницу, по нескольким ссылкам. Как отключить эту дурацкую опцию, и сделать чтобы ссылка была одна.
Тут я уточню:
http://site.ru/page
http://site.ru/44-page
http://site.ru/page-dsaasd
По всем этим ссылкам показывается одна страница, т.е. Joomla перенаправляет человека на нужную страницу автоматом.
А нужно сделать так чтобы http://site.ru/page показывалась нормально, а все остальные показывали ошибку 404,
т.е. чтобы если ссылка отличается хоть на 1 нас не перекидывало на оригинал статьи, а показывало 404

Если есть ссылка на статьи где написано решение данных проблем - скиньте, буду очень благодарен.
*

Kuzmitch

  • Захожу иногда
  • 150
  • 7 / 0
На всякий случай - может кому прегодится.
Костыль для Xmap
в .htaccess добавить правило

#Создаем sitemap.xml в компоненте Xmap
RewriteCond %{REQUEST_URI} ^/sitemap.xml
RewriteRule .* /index.php?option=com_xmap&id=1&view=xml
*

Kuzmitch

  • Захожу иногда
  • 150
  • 7 / 0
Но сейчас тестирую другую штуку. RSseo.
В нем есть фикс косяка с ответом 404 (с перенаправлением)
И есть карта сайта (в корень ложится sitemap.xml)
Пока тестирую, позже если получится отпишусь.
*

Amigo9876

  • Осваиваюсь на форуме
  • 29
  • 2 / 0
Это решение для Joomla 1.5 - работает на ура. Может и для 2.5 сгодится.
For frontpage:
/templates/your-theme/html/com_content/frontpage/default.php
Paste this code(first line file)
Код
<?php defined('_JEXEC') or die('Restricted access');
$this->original_link = "/";
if (JRequest::getInt('start') > 0) $this->original_link .= "index.php?start=" . JRequest::getVar('start');
$this->real_link = JRequest::getURI();
if ($this->original_link != $this->real_link) JApplication::redirect($this->original_link);
?>
For Pages (Articles):
/templates/your-theme/html/com_content/article/default.php
Код
<?php defined('_JEXEC') or die('Restricted access');
if ($this->article->readmore_link != JRequest::getURI()) JApplication::redirect($this->article->readmore_link);
?>
For Category:
/templates/your-theme/html/com_content/category/blog.php
Код
<?php defined('_JEXEC') or die('Restricted access');
$this->original_link = JRoute::_(ContentHelperRoute::getCategoryRoute(JRequest::getVar('id'), 0));
if (JRequest::getInt('start') > 0) $this->original_link .= "?start=" . JRequest::getVar('start');
$this->real_link = JRequest::getURI();
if ($this->original_link != $this->real_link) JApplication::redirect($this->original_link);
?>
For Section:
/templates/your-theme/html/com_content/section/blog.php
Код
<?php defined('_JEXEC') or die('Restricted access');
$this->original_link = JRoute::_(ContentHelperRoute::getSectionRoute(JRequest::getVar('id')));
if (JRequest::getInt('start') > 0) $this->original_link .= "?start=" . JRequest::getVar('start');
$this->real_link = JRequest::getURI();
if ($this->original_link != $this->real_link) JApplication::redirect($this->original_link);
?>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

В Joomla 2.5 VirtueMart 2.0.26d не работает добавление в корзину под мобилку

Автор kvintovskiy

Ответов: 8
Просмотров: 2342
Последний ответ 15.04.2024, 17:29:25
от Vastriet
Модуль устанавливается, но Joomla его не видит

Автор ruppert

Ответов: 20
Просмотров: 18804
Последний ответ 01.08.2022, 05:30:50
от rezon777
Как добавить описание к пункту меню в Joomla 2.5? (Как у материалов)?

Автор nia

Ответов: 7
Просмотров: 6187
Последний ответ 29.03.2021, 12:10:26
от sivers
Конструктор страниц (Page Builder) для Joomla 2.5

Автор nia

Ответов: 4
Просмотров: 2053
Последний ответ 14.03.2021, 12:17:35
от nia
Допиливаем Умный поиск в Joomla 2.5 (русский парадигматический стеммер для Joomla)

Автор stt

Ответов: 25
Просмотров: 15247
Последний ответ 29.12.2020, 23:57:16
от slepoy