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

Всем привет!
Я установил самую новую версию CommunityBuilder (скачал с офф сайта)
За инсталировал и мне на  верху выдало такую ошибку:

Warning: call_user_func_array() expects parameter 2 to be array, string given in C:\xampp\IMOD\administrator\components\com_comprofiler\plugin.foundation.php on line 1523

вот скрин:


Joomla! 1.5.15
« Последнее редактирование: 06.01.2010, 18:25:00 от Sulpher »
*

b2z

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

Re: CommunityBuilder (ошибка)
« Ответ #2 : 04.01.2010, 17:17:24 »
bzzik , Спасибо за помощ  *DRINK*

Re: CommunityBuilder (ошибка)
« Ответ #3 : 06.01.2010, 17:47:30 »
YaKHJ, У тебя получилось побороть эту ошибку ?? можешь описать как это сделать ?? а то та ссылка больше не работает
« Последнее редактирование: 06.01.2010, 17:51:42 от morion »
*

Sulpher

  • Живу я здесь
  • 2130
  • 402 / 16
  • Шаблоны и расширения Joomla
Re: CommunityBuilder (ошибка)
« Ответ #4 : 06.01.2010, 18:23:20 »
[spoiler title=1. Fix für Joomla 1.5 + CommunityBuilder 1.2.1]
Fehlermeldung im Frontend und Backend war:
Warning: call_user_func_array() expects parameter 2 to be array, string given in /users/XYZ/www/administrator/components/com_comprofiler/plugin.foundation.php on line 1523

Ich habe mir jetzt hier nicht alle Seiten durchgelesen, aber wollte nur mal meinen persönlichen Fix zumindest hier mal hinschreiben. Ob dadurch andere Probleme entstehen kann ich noch nicht sagen.



Joomla Files:

/libraries/joomla/document/document.php

Код
function addStyleSheet($url, $type = 'text/css', $media = null, $attribs = array())
{
$find = '.css';

if (is_array($url)) {
while ($urlpos = current($url)) {
if (strpos($urlpos, $find)) {
//echo key($url).'<br />';
//echo "URLPOS: ".$urlpos;
$urlfound = $url[key($url)];
//echo $urlfound;
}
next($url);
}
if ($urlfound) $url = $urlfound;
}

$this->_styleSheets[$url]['mime'] = $type;
$this->_styleSheets[$url]['media'] = $media;
$this->_styleSheets[$url]['attribs'] = $attribs;
}




Community Builder Files:



/administrator/components/com_comprofiler/plugin.foundation.php

Код
function _tryCmsDoc( $type, $params ) {
if ( $this->_cmsDoc ) {
if (is_string($params)) {
//HACK PHP 5.3
$params = func_get_args();
array_shift($params);

foreach($params as $k => &$param){
$params[$k] = &$param;
}
}
call_user_func_array( array( $this->_cmsDoc, $type ), $params );
return true;
}
return false;
}



/administrator/components/com_comprofiler/plugin.class.php



Код
function drawListBody( &$users, &$columns, $tableContent, $listid, $allow_profilelink ) {
$this->users =& $users;
$this->columns =& $columns;
$this->tableContent =& $tableContent;
$this->listid = $listid;
$this->allow_profilelink = $allow_profilelink;
return $this->draw( 'Body' );
}

INFO (DEBUG)


UPDATE Fix für Joomla 1.5 + CommunityBuilder 1.2.1 + PHP 5.3

Ich habe hier eine neue gefixte "plugin.foundation.php", welche nun hoffentlich besser funktioniert bzw. richtig und auch die nötigen Styles richtig hinzufügt.


Zusätzlich habe ich mal eine DEBUG-Version der Datei beigelegt, daran sieht man, was VORHER an die Funktion übergeben wird un was NACHHER nach dem Bearbeiten rauskommt. Nur für Analysezwecke gedacht.
[/spoiler]
*

SolopoV

  • Давно я тут
  • 576
  • 16 / 0
  • зеленею...
удалось установить CB включив мамбот System - Legacy
*

alexluxor

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Здрасте ! нужна помощь.
Установил CB  1.2.1  для Joomla 1.5.22 сразу выдал список ошибок ... вот верхние из них ! что делать, и как его переустановить?

Deprecated: Assigning the return value of new by reference is deprecated in J:\home\turkish-shop.ru\www\administrator\components\com_comprofiler\admin.comprofiler.controller.php on line 690

Deprecated: Assigning the return value of new by reference is deprecated in J:\home\turkish-shop.ru\www\administrator\components\com_comprofiler\admin.comprofiler.controller.php on line 2205

Deprecated: Assigning the return value of new by reference is deprecated in J:\home\turkish-shop.ru\www\administrator\components\com_comprofiler\admin.comprofiler.controller.php on line 3514

Deprecated: Assigning the return value of new by reference is deprecated in J:\home\turkish-shop.ru\www\administrator\components\com_comprofiler\admin.comprofiler.controller.php on line 3620

Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

CommunityBuilder русификация. Как быть ?

Автор Ztalker

Ответов: 5
Просмотров: 8295
Последний ответ 12.11.2014, 20:29:13
от Shademy
CommunityBuilder ошибка

Автор Fanat1111

Ответов: 4
Просмотров: 5464
Последний ответ 03.08.2012, 15:14:00
от HiopsNerevar
CommunityBuilder captcha, 100% рабочее и красивое решение !

Автор Hlistdubovij

Ответов: 5
Просмотров: 6846
Последний ответ 11.06.2012, 20:33:52
от wishlight
Ошибка при регистрации пользователя

Автор alexmobil

Ответов: 2
Просмотров: 4855
Последний ответ 18.04.2012, 13:56:00
от Timchik_
Как настроить CommunityBuilder чтобы отправлять e-mail пользователям для активации профиля

Автор nikomix

Ответов: 9
Просмотров: 5871
Последний ответ 26.02.2012, 13:24:23
от grob