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

intuitive

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Ребят, такое дело, подскажите. (Сразу хочу сказать, что прочитал ряд схожих тем и выполнил рекомендации, но, видать, случай особый или руки не из того места :))
Решил я удалить компонент sh404SEF...

Во время удаления (как требуется: деинсталляция через управление расширениями) что-то не срослось, ошибку не запомнил, в итоге не смог заново поставить его обратно: завершается 100% установки и выплёвывает:
Fatal error: Class 'ShlDbHelper' not found in ***/public_html/tmp/install_53f48c89e1f82/installation.script.php on line 267

Нужно-таки по-человечески удалить, подумал я, и последовательно вынес:
папку /administrator/components/sh404SEF
папку /components/sh404SEF
папки /plugins и /plugins/system не содержали ничего относящегося к sh404
Из БД вынес таблицы:
_sh404sef_aliases
_sh404sef_metas
_sh404sef_pageids
_sh404sef_urls


Далее нашел все упоминания sh404 и вынес записи из

_assets 1 запись
_extensions 1 запись
_menu 9 записей

Смотрю в админке Joomla - все чисто, никакого sh404. Начинаю переустанавливать. Доходит до 100% - Fatal error: Class 'ShlDbHelper' not found in ***/public_html/tmp/install_53f48c89e1f82/installation.script.php on line 267 и привет.

Компонент появляется, но при нажатии на него страница с сообщением
sh404SEF system plugin has b een disabled or has failed initializing. Please enable it again to use sh404SEF, with Joomla! plugin manager и привет.
Плагинов от sh404 в списке нет.

Буду признателен за какие-нибудь идеи - как заставить переустановиться компонент.

На борту:
Joomla 3.3.1
sh404SEF v4.4.4
PHP 5.3

*

Тренд

  • Захожу иногда
  • 59
  • 6 / 0
Я так понял, что привычки делать бекап сайта перед установкой, удалением и обновлением нет?
Насчет вычищения... надо еще и кеш почистить, там тоже всякое может сохраниться. Ну и папочку tmp, можно целиком очистить кроме index.html
Ну если и это не помогает, залезаем в эти файлы, перемещаемся на указанные строки и смотрим что там требуется.
*

intuitive

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Я так понял, что привычки делать бекап сайта перед установкой, удалением и обновлением нет?
В точку :(
Кэш постоянно чищу. Полез в файлы.

Цитировать
      // read saved config
         $extFile = $this->_preserveConfigFolder . 'sh404_upgrade_conf' . '/com_sh404sef_' . $this->_siteId . '.php';
         
         // remove previous if any
         if (JFile::exists($extFile))
         {
            include_once $extFile;
            if(!empty($sh404sefConfig))
            {
               // write it back into sh404SEF config field
               try {
                  ShlDbHelper::update('#__extensions', array('params' => $sh404sefConfig), array('type' => 'component', 'element' => 'com_sh404sef'));
               }
               catch (Exception $e)
               {
                  JFactory::getApplication()
                  ->enqueuemessage('Database error while restoring saved configuration. Config may be lost: ' . $e->getMessage());
               }
            }
         }

      }

Выделил 267 строчку.
Как я понял, если очень грубо : "Скрипт ищет то, что не удалено, если находит, удаляет, а в моем случае нет того, что нужно удалить"  ! :o
« Последнее редактирование: 20.08.2014, 16:52:30 от intuitive »
*

Тренд

  • Захожу иногда
  • 59
  • 6 / 0
Попробуй вывести что содержится в переменной $extFile
      // read saved config
         $extFile = $this->_preserveConfigFolder . 'sh404_upgrade_conf' . '/com_sh404sef_' . $this->_siteId . '.php';
print "extFile = $extFile";
потом после подключения файла посмотреть что содержит переменная $sh404sefConfig
скорее всего это будет массив и надо его просмотреть print_r($sh404sefConfig)
там скорее всего какой-то параметр кривой... надо его найти.
*

deepsky303

  • Новичок
  • 6
  • 0 / 0
Если вдруг кто столкнётся с этой же ошибкой, то вот решение :

1. Удалить записи, связанные с sh404SEF из таблиц БД вашего сайта
 
 _assets
 _extensions
 _menu

для кучи ещё две таблицы shlib.

2. После этого удалить все папки связанные с sh404SEF из :

administrator/components/
administrator/modules/
media/
plugins/
plugins/system/
components/

3. Очистить папку tmp.

После этого компонент установился без вопросов.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вопрос по настройке router.php VirtueMart 2 для sh404SEF

Автор Genom.23

Ответов: 4
Просмотров: 4327
Последний ответ 18.03.2015, 19:45:10
от fenix-77
Проблема с sh404SEF и JoomShopping

Автор tamaz

Ответов: 1
Просмотров: 1795
Последний ответ 17.03.2014, 19:41:46
от tamaz
Долго грузит карту сайта

Автор Akksimo

Ответов: 0
Просмотров: 1286
Последний ответ 22.10.2012, 22:27:37
от Akksimo
sh404SEF создала редирект с главной на внутренню

Автор DmitriyB

Ответов: 10
Просмотров: 3789
Последний ответ 06.10.2012, 12:31:23
от adverte
Как боротся с дублями

Автор boomerang

Ответов: 0
Просмотров: 1526
Последний ответ 08.09.2012, 23:07:14
от boomerang