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

Barabashka

  • Захожу иногда
  • 64
  • 0 / 0
  • Son of Sky
взять имя текущего юзера  и создать папку для загрузок с таким названием
как реализовать?

в плагин редактора нужно записать код, который персонализирует директорию загрузок (для каждого пользователя отдельная с иным именем). кажется в JCE есть подобное.
фактически, достаточно только записать имя в переменную.. но откуда его взять в стороннем php коде?
« Последнее редактирование: 10.05.2013, 11:23:24 от Barabashka »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
если плагин редактора для Joomla то скорее всего он вызывается из под Joomla и API можно юзать
echo JFactory::getUser()->username;
*

Barabashka

  • Захожу иногда
  • 64
  • 0 / 0
  • Son of Sky
спасибо, друг!. в другой теме меня не слышат вообще

использую CKEditor  http://cksource.com/ckeditor в котором в качестве файлового менеджера используется CKFinder  http://cksource.com/ckfinder..

там в конфиге есть строчки
Код
$config['ResourceType'][] = Array(
'name' => 'Files', // Single quotes not allowed
'url' => $baseUrl . 'files',
'directory' => $baseDir . 'files',
где 2 последние  указывают на директорию mydomain.com\ckfinder\userfiles\files

изучив код, понял что достаточно дополнить код до этого
Код
$config['ResourceType'][] = Array(
'name' => 'Files', // Single quotes not allowed
'url' => $baseUrl . 'files' . $username,
'directory' => $baseDir . 'files' . $username,
а в $username вписать имя текущего пользователя

для этого я прямо в код вставляю такие строки (находил много вариантов в поисковике, остановился на этом)
Код
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__));
define( 'DS', DIRECTORY_SEPARATOR );
define('JPATH_PLATFORM', JPATH_BASE . '/libraries');
define('JPATH_MYWEBAPP',JPATH_BASE);
// подключаем необходимый минимум
require_once JPATH_PLATFORM.'/import.php';
// И еще кое-что в помощь
jimport('joomla.environment.uri');
jimport('joomla.utilities.date');
//Задаем конфигурацию
jimport('joomla.application.helper');
$client = new stdClass;
$client->name = 'mywebapp';
$client->path = JPATH_MYWEBAPP;
JApplicationHelper::addClientInfo($client);
// Получаем инстанс JApplication
$config = Array ('session'=>false);
$app = JFactory::getApplication('mywebapp', $config);


/* Создание приложения на базе основного класса JFactory*/
$mainframe =& JFactory::getApplication('site');
/* Проверка глобального статуса текущего пользователя. Логический 0 - гость*/
if (JFactory::getUser()->id == 0)
die("Для просмотра этой информации необходимо пройти авторизацию/регистрацию на сайте.");

$user =& JFactory::getUser();
$username = $user->username;

запустил, получил ошибки
Цитировать

Warning: require_once(R:\home\12\www\plugins\editors\ckeditor\ckfinder/libraries/import.php) [function.require-once]: failed to open stream: No such file or directory in R:\home\12\www\plugins\editors\ckeditor\ckfinder\config.php on line 202

Fatal error: require_once() [function.require]: Failed opening required 'R:\home\12\www\plugins\editors\ckeditor\ckfinder/libraries/import.php' (include_path='.;C:\php\pear') in R:\home\12\www\plugins\editors\ckeditor\ckfinder\config.php on line 202

что упускаю или делаю не так?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
directory' => $baseDir . 'files' . $username,
неправильно! сшел же ещё надо!
directory' => $baseDir . 'files/' . $username,
и редактор это плагин для Joomla? есла да то вам не надо подключать платформу!
*

Barabashka

  • Захожу иногда
  • 64
  • 0 / 0
  • Son of Sky
я понимаю, что без слеша будет не в папке files создавать, а создасть папку filesmyusername в корневой. но это не столь важно мне сейчас

редактор - выпускается как компонент для Joomla, который устанавливаясь одновременно создает  плагин редактора
(тоесть в сомпонентс имеем сом_скедитор и в плагинс/едиторс - скедитор..)

понимаю вашу логику, но когда просто прописываю
Код
 
$user =& JFactory::getUser();
$username = $user->username;
получаю ошибку, что "клас JFactory не найден"
*

Barabashka

  • Захожу иногда
  • 64
  • 0 / 0
  • Son of Sky
Вы были абсолютно правы, прошу прощения за дезинформацию.  в папке плагина есть файл config_joomla.php
где платформа уже подключена.. только появилась новая проблема:

прописал уже там
Код
$user =& JFactory::getUser();
$username = $user->username;
$username = '/'.$username;
и дополнил строчку
Код
'url' => ($baseUrl . 'files'.$username,
но открило папку files а не files/myusermname (не создало новой)

что интересно  строка $username = '/4';
если написать в config.php создает папку 4, а если в config_joomla.php, то нет
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

Barabashka

  • Захожу иногда
  • 64
  • 0 / 0
  • Son of Sky
привожу весь код конфига плагина, если вы про это
Спойлер
[свернуть]

но наверное он уже не пригодится. .
прочитал краткую инструкцию к config_joomla.php, удалил config.php
переименовал config_joomla.php в config.php

нашел в ckeditor.php (что в корневой редактора) вот такие строки (где-то на 400 строке). думаю, что это оно
но уже сам не правил, подожду ответа
Спойлер
[свернуть]

привожу на всякий случай весь код ckeditor.php
Спойлер
[свернуть]
« Последнее редактирование: 09.05.2013, 23:18:25 от Barabashka »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

Barabashka

  • Захожу иногда
  • 64
  • 0 / 0
  • Son of Sky
папка mydomain.com/media/images
или ../media/files

в процессе поисков решения у меня как -то создались папки в корневой mediaimages/myusername и даже тестовое изображение там оказалось, но так как в диалоговом окне файлового менеджера постоянно отрывало одно и тоже, я не успел виследить когда именно
*

Barabashka

  • Захожу иногда
  • 64
  • 0 / 0
  • Son of Sky
очень стыдно, что поднял такую бучу из-за простого вопроса.. (

в настройках компонента во вкладке File Browser settings есть поля Images path, Files path и т.д. где в подсказке и предлагается вводить $username, $id, $usertype, что я и когда-то сделал, но не получил результата, так как конфиг не был вручную заменен конфигом Joomla. .
сейчас я вписал в поле media/images/$username и редактор автоматически создал нужную папку. Спасибо большое всем за отзывы и терпеливость
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как правильно записать дату создания записи в БД?

Автор ImPuLsE

Ответов: 13
Просмотров: 3158
Последний ответ 11.09.2019, 22:58:57
от sev07
Узнать название группы залогинившегося\нет пользователя Joomla 3.5

Автор paladdin

Ответов: 4
Просмотров: 1304
Последний ответ 29.03.2016, 21:43:41
от b2z
Вывод данных из MySQL в зависимости от авторизованного пользователя

Автор lopata12

Ответов: 6
Просмотров: 1805
Последний ответ 21.02.2015, 21:09:33
от lopata12
ОбЪявить переменную в модуле

Автор jservice

Ответов: 38
Просмотров: 2813
Последний ответ 29.12.2014, 11:56:04
от Aleks.Denezh
Как узнать ID текущего модуля?

Автор vita1971

Ответов: 1
Просмотров: 1792
Последний ответ 09.09.2014, 13:31:57
от vita1971