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

ferser

  • Новичок
  • 5
  • 0 / 0
Логин вместо имени
« : 13.11.2008, 01:21:48 »
Нужно чтобы в "автор статьи" вместо Имени выводился Логин.
Поиск дал резултаты с использованием мамбота MosAuthorXTD.
Как можно это сделать без использования последнего? !!!???!!!
Joomla 1015LE. Установлен CommunityBuilder.
Спс
« Последнее редактирование: 13.11.2008, 07:57:17 от ferser »
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Логин вместо имени
« Ответ #1 : 13.11.2008, 04:48:51 »
Найти строку кода где выводиться имя пользователя и заменить на строчку вывода логина, что то типа вот такого:
Код
$row->name
на
Код
$row->имя поля с логиным(можно подсмотреть в таблице ios_users)
*

ferser

  • Новичок
  • 5
  • 0 / 0
Re: Логин вместо имени
« Ответ #2 : 13.11.2008, 08:04:50 »
components\com_content\content.html.php

Код
	* Writes Author name
*/
function Author( &$row, &$params ) {
if ( ( $params->get( 'author' ) ) && ( $row->author != '' ) ) {
?>
<tr>
<td width="70%" align="left" valign="top" colspan="2">
<span class="small">
<?php echo _WRITTEN_BY . ' '.( $row->created_by_alias ? $row->created_by_alias : $row->author ); ?>
</span>
&nbsp;&nbsp;
</td>
</tr>
<?php
}
}
Вроде здесь выводится, но здесь  $row->author, а поля в jos_users: name, username, email, password и т.д.
Или это где-то в другом месте?
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Логин вместо имени
« Ответ #3 : 13.11.2008, 10:37:29 »
вот тут замените вот так:
Код
<span class="small">
<?php echo _WRITTEN_BY . ' '.( $row->created_by_alias ? $row->created_by_alias : $row->author ); ?>
</span>
на
Код
<span class="small">print_r ( $row );
<?php echo _WRITTEN_BY . ' '.( $row->created_by_alias ? $row->created_by_alias : $row->author ); ?>
</span>
и скинте сюда результат запроса
*

ferser

  • Новичок
  • 5
  • 0 / 0
Re: Логин вместо имени
« Ответ #4 : 13.11.2008, 15:32:10 »
Результат:
Выводит следующий текст "print_r ( $row ); Написал ИМЯ"

Предложенный вариант не работает :(
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Логин вместо имени
« Ответ #5 : 13.11.2008, 18:16:37 »
http://joomlaforum.ru/index.php/topic,46627.msg273491.html#msg273491
там есть запрос как получить автора из jos_users(поменяете на имя поля с логиным и все будет) или через альянс в материале!
*

ferser

  • Новичок
  • 5
  • 0 / 0
Re: Логин вместо имени
« Ответ #6 : 13.11.2008, 21:36:55 »
mambots\content\CBAuthorBot.php

Код
$row->created_by_alias="<a href=\"".sefRelToAbs('index.php?option=com_comprofiler&task=userProfile&Itemid=2&user='.$row->
created_by)."\" onmouseover=\"Tip('$image', SHADOW, true, BGCOLOR, '$bgcolor', BORDERCOLOR, '$bordercolor')\">".($row->created_by_alias!='' ? $row->created_by_alias : $row->author)."</a>";

здесь формируется $row->created_by_alias, который потом выводится как "автор статьи".
Можно ли здесь что-то подправить, чтобы вместо имени выводило логин?
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Логин вместо имени
« Ответ #7 : 13.11.2008, 22:14:03 »
Да можно, я ссылку то для кого привел?
там блин даже комментарии есть специально писал для того что бы вопросов было меньше, вы посмотрите код, а не копи паст делайте, просмотрите таблицу юзверей там нужное поле только подставить!
Я код приводить не стану, попробуйте сами реализовать - поймёте как это просто оказывается
*

YOzhik

  • Захожу иногда
  • 74
  • 1 / 0
  • я ёжик, я упал в реку
Re: Логин вместо имени
« Ответ #8 : 09.07.2009, 13:54:16 »
Ссылка теперь нерабочая стала :'( Напишите пожалуйста код. а?
*

ShadowXak

  • Завсегдатай
  • 1602
  • 162 / 6
  • no more programming
Re: Логин вместо имени
« Ответ #9 : 09.07.2009, 15:15:11 »
вы лучше напишите что вы хотите ;)
и почему бы в алиас не писать Имя автора (т.к. если Алиас заполнен то выводится именно он)
распешите что используете
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Картинка вместо заголовка модуля

Автор tolya2005

Ответов: 12
Просмотров: 9767
Последний ответ 19.07.2012, 01:37:45
от Marques
Забыла логин и пароль введенные при локальной установке

Автор tvergeles

Ответов: 11
Просмотров: 6910
Последний ответ 15.10.2010, 20:51:10
от oleggrz
вместо новостей ошибка

Автор simply_green

Ответов: 1
Просмотров: 2017
Последний ответ 25.08.2009, 06:10:18
от ShadowXak
Установка общего имени-пароля для всех пользователей без возможности изменения его пользователями.

Автор petr7

Ответов: 1
Просмотров: 1933
Последний ответ 15.08.2009, 13:09:20
от beliyadm
Как зделать чтоб вместо Error 404 страницу ненайдено отправляло по ссылке

Автор QWER

Ответов: 5
Просмотров: 6409
Последний ответ 28.05.2009, 15:33:09
от maximum1