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

css_ufa

  • Захожу иногда
  • 182
  • 10 / 0
Всем привет!
 
Скидываю код для тех кто не хочет ставить лишние компоненты, такие как sh404SEF и т.д. для нагрузки и хочет собственную страницу Ошибка 404.
 
Данный код необходимо вставить в файл error.php.
 
Кодировка файла: UTF-8 (без BOM)
 
Путь файла: /templates/Ваш_шаблон/error.php
 
Код:
Код
<?php
/**
* @copyrightCopyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
* @licenseGNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/
 
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
<head>
</head>
<body>
<?php
if (($this->error->code) == '404') {
header("HTTP/1.0 404 Not Found"); /*добавлено после учёта комментариев - отправляет код ошибки для поисковика*/
echo file_get_contents('http://site.ru/Аллиас'); /*открывает страницу ошибок для пользователя. Код ответа сервера 404*/
exit;
}
?>
</body>
</html>

Для того чтобы ошибка 404 отображалась корректно, необходимо:
1. Создать меню, выводить его в шаблон не нужно
2. Создать в меню материал под ошибку 404 и ввести любой алиас, который Вам нравиться.
3. Данный Аллиас вставить сюда:

Код
echo file_get_contents('http://site.ru/Аллиас'); /*открывает страницу ошибок для пользователя. Код ответа сервера 404*/

Надеюсь Вам пригодится!

Если Вам помог, ставьте Плюс, пожалуйста ;)

Всем спасибо!
*

css_ufa

  • Захожу иногда
  • 182
  • 10 / 0
Задавайте вопросы!

С удовольствием на них отвечу!
*

css_ufa

  • Захожу иногда
  • 182
  • 10 / 0
Также несколько решений в интернете.
Способ 1 и 2
Способ 3
*

SKYwoker

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
У меня такая проблема:
хочу чтобы страница 404 была полностью со своим дизайном. Сейчас у меня 404 сделана на подобии как в первом посте этой темы. Редирект типа ErrorDocument 404 http://www.yousite.ru/404.html не помогает, т.к. запрещен хостингом.

Есть ли какой-нибудь другой способ подвязать отдельный HTML файл?
В принциме наверняка сработает вариант если прописать редирект со страницы /index.php?option=com_content&amp;view=article&amp;id=11 на /404.html но думаю это кривой способ по ряду причин. Что скажете?
*

ELLE

  • Глобальный модератор
  • 4506
  • 893 / 0
*

SKYwoker

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
ELLE, что-то не то вы советуете (или просто это сильно сложно для меня). По крайней мере я не понял, как информация по ссылке может помочь.
*

ELLE

  • Глобальный модератор
  • 4506
  • 893 / 0
ELLE, что-то не то вы советуете (или просто это сильно сложно для меня). По крайней мере я не понял, как информация по ссылке может помочь.
как вариант отображения страницы 404 в своем дизайне (или я вашу фразу не так поняла) - то есть с теми же модулями, в том же оформлении что и другие страницы сайта (главная например), при этом код ответа будет корректно отдаваться и без всяких редиректов
*

SKYwoker

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Нет. С точностью до наоборот.
Цитировать
Есть ли какой-нибудь другой способ подвязать отдельный HTML файл?
Т.е. я хочу чтобы при ошибке 404 выводилось содержание файла /404.html с исключительно его содержимим и дизайном. Независимо от дизайна сайта.
*

ELLE

  • Глобальный модератор
  • 4506
  • 893 / 0
Ну тогда я вообще никакой проблемы не вижу=)
Верстаем error.php как нам надо и профит!
Или как Курильщик советует всегда при ошибке 404 отправлять на 404.php, в случае допустим ошибки 500 отправлять на 500.php (все эти файлы также в шаблоне создаем)
*

SKYwoker

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Цитировать
Верстаем error.php как нам надо и профит!
error.php у меня вот такой:
Код
<?php
/**
 * @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
 * @license GNU/GPL, see LICENSE.php
 * Joomla! is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 */

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
?>
<?php
  header("HTTP/1.1 404 Not Found");
  echo file_get_contents(JURI::root().'/index.php?option=com_content&amp;view=article&amp;id=11');
?>
И все что он делает - это при возникновении ошибки выводит страницу /index.php?option=com_content&amp;view=article&amp;id=11 в шаблоне сайта.
Что тут можно верстать?

Цитировать
Или как Курильщик советует всегда при ошибке 404 отправлять на 404.php, в случае допустим ошибки 500 отправлять на 500.php (все эти файлы также в шаблоне создаем)
Вот вот. Этого я и хочу. Как можно реализовать где-нибудь описано?
*

css_ufa

  • Захожу иногда
  • 182
  • 10 / 0
У меня такая проблема:
хочу чтобы страница 404 была полностью со своим дизайном. Сейчас у меня 404 сделана на подобии как в первом посте этой темы. Редирект типа ErrorDocument 404 http://www.yousite.ru/404.html не помогает, т.к. запрещен хостингом.

Есть ли какой-нибудь другой способ подвязать отдельный HTML файл?
В принциме наверняка сработает вариант если прописать редирект со страницы /index.php?option=com_content&amp;view=article&amp;id=11 на /404.html но думаю это кривой способ по ряду причин. Что скажете?
Вы можете использовать свою страницу, которая будет встроенная в дизайн сайта! Я все это описал в 1 посте!
UPDATE
Понял, что уже не надо!)
*

alsa

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Добрый день! Помогите, пожалуйста, решить проблему... страница с 404 работает только если вписываем неправильный url вне раздела, стоит зайти в раздел "Галерея" или любой другой, вместо страницы с 404 выпадает белый экран. Как это решить?
*

kolio

  • Захожу иногда
  • 91
  • 11 / 4
сделал 404 страницу, на сайте SEF не юзается
при вводе вместо
http://________/index.php?option=com_content&view=article&id=5419&catid=59&Itemid=15
явно ошибочную страницу
http://________/index.php?option=com_conte5nt&view=article&id=5419&catid=59&Itemid=15

выдает страницу ошибки, и 404й код

НО! если ввести
например  http://_________/sdfsdfsdf/sdfsdfsdf.html
выдает главную страницу сайта, и код 200

может кто знает, это настройки сайта? или хостер? или еще чего-то?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

simpleform2 ошибка ajax error в Google chrome

Автор safronoff343

Ответов: 1
Просмотров: 1176
Последний ответ 05.06.2020, 20:36:42
от safronoff343
Не работает страница XML выдает ошибку: This page contains the following errors

Автор vitaliywolf

Ответов: 20
Просмотров: 18155
Последний ответ 07.05.2020, 22:24:16
от sivers
Ошибка #1050 при переносе базы данных на хостинг

Автор Ksen

Ответов: 7
Просмотров: 24781
Последний ответ 16.03.2020, 17:47:29
от Petrovich
При попытке войти в админку 404 ошибка компонента

Автор omezik

Ответов: 4
Просмотров: 2841
Последний ответ 31.08.2019, 22:41:46
от Taatshi
Ошибка в компоненте CKForms

Автор Vas80

Ответов: 9
Просмотров: 1682
Последний ответ 22.04.2019, 13:34:48
от sivers