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

VovaAtom

  • Осваиваюсь на форуме
  • 14
  • 3 / 0
  • Киииборги ... они ... запаланили всю планету!
сделал как написано   ErrorDocument 404 http://xxxx.com/index.php?option=com_xmap&sitemap=1
но все равно выдает стандартную страницу в чем может быть ошибка???
Та же проблема.
Прописал в .htaccess ErrorDocument 404 http://url, но Joomla 1.5 все равно выдает свою 404 страницу.
Нужна ваша помощь!


Тему выделил отсюда http://joomlaforum.ru/index.php/topic,42894.0.html, бо уже затрагивает Joomla 1.5
« Последнее редактирование: 22.07.2009, 18:11:26 от MuraDweb »
*

evgen22

  • Захожу иногда
  • 79
  • 7 / 0
Да короче поставь ARTIO JoomSEF там есть такая опция.
*

Strogiy

  • Новичок
  • 7
  • 0 / 0
Можно сделать так:
В папке templates/system есть файл error.php. Стираете в нем всё содержимое и вместо этого пишете:
<?php
/**
 * @copyright   Copyright (C) 2005 - 2008 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' );
?>
<!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>
   <script language='javascript'>

var1=71;

var2=var1;

if(var1==var2) document.location="ЗДЕСЬ ВАША ССЫЛКА, КУДА НАДО ПЕРЕНАПРАВИТЬ";

</script>
</body>
</html>

*

VovaAtom

  • Осваиваюсь на форуме
  • 14
  • 3 / 0
  • Киииборги ... они ... запаланили всю планету!
Да короче поставь ARTIO JoomSEF там есть такая опция.
Спасибо, но к сожалению ARTIO JoomSEF использовать в моем случае не целесообразно.

Можно сделать так:
В папке templates/system есть файл error.php. Стираете в нем всё содержимое и вместо этого пишете:
<?php
/**
 * @copyright   Copyright (C) 2005 - 2008 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' );
?>
<!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>
   <script language='javascript'>

var1=71;

var2=var1;

if(var1==var2) document.location="ЗДЕСЬ ВАША ССЫЛКА, КУДА НАДО ПЕРЕНАПРАВИТЬ";

</script>
</body>
</html>


Большое спасибо. Помогло, работает.
Но тут одна проблема - выводится одна страница на все ошибки ...
Как определить код ошибки и вывести соответствующую страницу с помощью php?

Посмотрел код стандартного error.php - там вроде как переменная (или что то в этом роде, в php не силен) error->code используется ...

Помогите составить error.php, который выдает свою страницу на каждую ошибку.  !!!???!!!

Заранее спасибо.
« Последнее редактирование: 21.07.2009, 22:23:19 от VovaAtom »
*

Strogiy

  • Новичок
  • 7
  • 0 / 0
Немного вас не понял.
Вам надо, чтобы страница ошибки (ее содержимое), выводилось в дизайне сайта??? Так?
Редирект на заданную страницу не нужен?
*

MuraDweb

  • Захожу иногда
  • 267
  • 124 / 1
Но тут одна проблема - выводится одна страница на все ошибки ...
Как определить код ошибки и вывести соответствующую страницу с помощью php?

Посмотрел код стандартного error.php - там вроде как переменная (или что то в этом роде, в php не силен) error->code используется ...

Помогите составить error.php, который выдает свою страницу на каждую ошибку.  !!!???!!!

Я делал, так. Покажется громоздко, зато очень универсально :)
Сначала бэкапим (на всякий случай) оригинальный файл error.php.
В рабочем меняем полностью код на этот
Код: php
<?php
/**
 * @copyright Copyright (C) 2005 - 2008 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' );

$task = '';

/* Определяем есть ли нужный индивидуальный файл страницы ошибок */
if(file_exists('templates/system/my_error/'.$this->error->code.'.php')) {
/* присваиваем */
$task = 'custom';
/* Иначе */
} else {
/* Определяем есть ли дефолтный файл страницы ошибок */
if(file_exists('templates/system/my_error/my_error.php')) {
/* присваиваем */
$task = 'default';
/* Иначе */
} else {
/* присваиваем */
$task = 'standart';
} // if else
} // if else

switch($task) {
case 'custom':
/* Подключаем индивидуальный файл страницы ошибок */
require_once('templates/system/my_error/'.$this->error->code.'.php');
break;
case 'default':
/* Подключаем дефолтный файл страницы ошибок */
require_once('templates/system/my_error/my_error.php');
break;
case 'standart':
default:
/* Выводим стандартную страницу ошибок Joomla */
?>
<!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>
<title><?php echo $this->error->code ?> - <?php echo $this->title; ?></title>
<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/css/error.css" type="text/css" />
</head>
<body>
<div align="center">
<div id="outline">
<div id="errorboxoutline">
<div id="errorboxheader"><?php echo $this->error->code ?> - <?php echo $this->error->message ?></div>
<div id="errorboxbody">
<p><strong><?php echo JText::_('You may not be able to visit this page because of:'); ?></strong></p>
<ol>
<li><?php echo JText::_('An out-of-date bookmark/favourite'); ?></li>
<li><?php echo JText::_('A search engine that has an out-of-date listing for this site'); ?></li>
<li><?php echo JText::_('A mis-typed address'); ?></li>
<li><?php echo JText::_('You have no access to this page'); ?></li>
<li><?php echo JText::_('The requested resource was not found'); ?></li>
<li><?php echo JText::_('An error has occurred while processing your request.'); ?></li>
</ol>
<p><strong><?php echo JText::_('Please try one of the following pages:'); ?></strong></p>
<p>
<ul>
<li><a href="<?php echo $this->baseurl; ?>/index.php" title="<?php echo JText::_('Go to the home page'); ?>"><?php echo JText::_('Home Page'); ?></a></li>
</ul>
</p>
<p><?php echo JText::_('If difficulties persist, please contact the system administrator of this site.'); ?></p>
<div id="techinfo">
<p><?php echo $this->error->message; ?></p>
<p>
<?php if($this->debug) :
echo $this->renderBacktrace();
endif; ?>
</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
<?php
break;
} // switch
?>

Создаем в templates/system/ свою папку my_error/ с подпапками css/ , images/ и нужными файлами для удобства пользования. В общем структура расположения папок и файлов будет выглядеть так:

[spoiler title=РАЗВЕРНУТЬ \ СВЕРНУТЬ]
templates/
     |-system/
            |-...
            |-my_error/
            |      |-css/
            |      |      |-my_error.css // Дефолтный стиль страниц
            |      |      |-...
            |      |      |-404.css  /
            |      |      |-500.css  // Индивидуальные стили страниц
            |      |      |-###.css  /
            |      |
            |      |-images/
            |      |      |-111.png
            |      |      |-...     // графика страниц (если есть\используется)
            |      |      |-999.png
            |      |
            |      |-my_error.php // Дефолтная страница
            |      |-...
            |      |-404.php  /
            |      |-500.php  //  Индивидуальная страница
            |      |-###.php  /
            |
            |-...
            |-error.php // правленный нами стандартный файл страниц ошибок
            |-error.php.bak // бэкап оригинального файла (на всяки пожарный)
            |-...
[/spoiler]

В дефолтный файл my_error.php вставляем следующий код
Код: php
<?php
/**
 * @copyright Copyright (C) 2005 - 2008 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' );
?>
<!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>
<title><?php echo $this->error->code ?> - <?php echo $this->title; ?></title>
<?php
/* Пытаемся подключить файл дефолтного стиля my_error.css */
if(file_exists('templates/system/my_error/css/my_error.css')) {
?>
<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/my_error/css/my_error.css" type="text/css" />
<?php
/* Если файла нет, подключаем стандартный файл стилей Joomla */
} else {
?>
<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/css/error.css" type="text/css" />
<?php } // if else ?>
</head>
<body>
...
{ далее идет ваш код разметки HTML - верстка}
...
</body>
</html>

В индивидуальные файлы 403.php, 404.php и т.д., вставляем следующий код
Код: php
<?php
/**
 * @copyright Copyright (C) 2005 - 2008 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' );
?>
<!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>
<title><?php echo $this->error->code ?> - <?php echo $this->title; ?></title>
<?php
/* Пытаемся подключить файл индивидуального стиля XXX.css (где XXX код ошибки) */
if(file_exists('templates/system/my_error/css/'.$this->error->code.'.css')) {
?>
<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/my_error/css/<?php echo $this->error->code ?>.css" type="text/css" />
<?php
/* Если файла нет, подключаем файл дефолтного стиля my_error.css */
} else if(file_exists('templates/system/my_error/css/my_error.css')) {
?>
<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/my_error/css/my_error.css" type="text/css" />
<?php
/* Если и его нет, подключаем стандартный файл стилей Joomla */
} else {
?>
<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/css/error.css" type="text/css" />
<?php } // if else ?>
</head>
<body>
...
{ далее идет ваш код разметки HTML - верстка}
...
</body>
</html>

Стили в файлах .css соответственно ваши (на вкус и цвет)

Не забудьте, все файлы сохранять в кодировке UTF-8 без ВОМ


« Последнее редактирование: 28.07.2009, 01:41:21 от MuraDweb »
Яндекс.Деньги: 41001423568435
Webmoney: R 377548789269 | Z 421465848009 | E 126339514076 | U 413960261029
-
А, Вы читали ? Правила форума | FAQ J! 1.5 | FAQ J! 1.0
*

step-di

  • Захожу иногда
  • 91
  • 5 / 0
Тоже столкнулся с такой задачей. Принципиально отказался от SEF компонентов (Artio JoomSEF и sh404SEF), включил лишь SEF, встроенный в Joomla 1.5.
Сначала  добавил код в error.php чтобы он делал редирект на определенную страницу сайта.
Но в идеале хочется внутренний редирект
Чтобы ссылка в строке браузера не менялась, как это реализовано в Joomla, и выводилась нужная страница, но обязательно в дизайне сайта, под тем URL-адресом, куда зашел пользователь.
Помогите люди добрые это реализовать
*

MuraDweb

  • Захожу иногда
  • 267
  • 124 / 1
Яндекс.Деньги: 41001423568435
Webmoney: R 377548789269 | Z 421465848009 | E 126339514076 | U 413960261029
-
А, Вы читали ? Правила форума | FAQ J! 1.5 | FAQ J! 1.0
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Joomla 1.5 как убрать кнопку редактировать материант с сайта

Автор andriy465

Ответов: 5
Просмотров: 3660
Последний ответ 12.11.2023, 23:37:03
от all_zer
Вопросительные знаки вместо букв

Автор Alex_iPod

Ответов: 6
Просмотров: 8955
Последний ответ 20.09.2022, 22:13:45
от PaLyCH
Как сделать появление случайных картинок из пяти разных категорий?

Автор Katy93

Ответов: 2
Просмотров: 2788
Последний ответ 03.05.2021, 21:34:20
от sivers
Не могу распаковать jpa архив сайта Akeeba backup. ajax error

Автор smadkz

Ответов: 4
Просмотров: 1780
Последний ответ 26.12.2020, 15:15:15
от stendapuss
Вместо некоторых разделов стали отображаться пустые страницы

Автор ch

Ответов: 0
Просмотров: 1204
Последний ответ 04.12.2020, 15:07:27
от ch