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

polepropilen

  • Осваиваюсь на форуме
  • 29
  • 1 / 0
Установлена Joomla 2.5
Профиль стоит от компонента К2

Необходимо создать запрос на свой профиль

Вот пример xml

Код
<?xml version="1.0" encoding="UTF-8"?>
    <user>
        <uid>127</uid>
        <first_name>Василий</first_name>
        <nickname>ЧАПАЕВ</nickname>
        <sex>M</sex>
        <avatar_url>http://example.com/avatars/user/127</avatar_url>
    </user>
</profiles>

Подскажите какие команды вписать в место 127, Василий, ЧАПАЕВ, M, http://example.com/avatars/user/127.

<sex>M</sex> должно быть одной буквой
F - женский
M - мужской
*

polepropilen

  • Осваиваюсь на форуме
  • 29
  • 1 / 0
В этот файл нужно вставить аватор и пол пользователя
Код
<?php
/**
 * @version SVN: $Id: builder.php 469 2011-07-29 19:03:30Z elkuku $
 * @package    NextGame
 * @subpackage Base
 * @author     Constantine Poltyrev {@link http://shprotasoft.spb.ru}
 * @author     Created on 02-Nov-2011
 * @license    GNU/GPL
 */

//-- No direct access
defined('_JEXEC') || die('=;)');

jimport('joomla.application.component.controller');

/**
 * NextGame Controller.
 *
 * @package    NextGame
 * @subpackage Controllers
 */
class NextGameController extends JController
{
    function getProfile()
    {
        $params = JComponentHelper::getParams('com_nextgame');
        $secret = $params->get('secret'); //'5B3A7967259F5EB7E2D6D03E15DD0F1AC98DDA31';
        $uids = JRequest::getString('uid');
        $t = JRequest::getString('time');
        $sig = JRequest::getString('sig');
        $tmp = "option=com_nextgametask=getProfiletime=${t}uid=${uids}$secret";
        $vsig = md5($tmp);
        error_log("User request: ".print_r($_REQUEST, true)."\n$sig = $vsig");
        if(false && $vsig != $sig)
        {
            echo "Неверная подпись запроса!";
            error_log("Bad signature!");
            JFactory::getApplication()->close();
            return false;
        }
        $ids = explode(',', $uids);
        JArrayHelper::toInteger($ids);
        $out = '';
        foreach($ids as $id)
        {
            $user = JFactory::getUser($id);
            $out .= "<user>\n";
            $out .= "<uid>$user->id</uid>\n";
            @list($first_name, $last_name) = explode(' ', $user->name);
            if(!$first_name)
                $first_name = '';
            $out .= "<first_name>$first_name</first_name>\n";
            if(!$last_name)
                $last_name = '';
            $out .= "<last_name>$last_name</last_name>\n";
            $out.="<nickname>$user->username</nickname>\n";
            $out .= "<sex>СЮДА НУЖНО ВСТАВИТЬ ПОЛ ПОЛЬЗОВАТЕЛЯ</sex>\n<avatar_url>СЮДА НУЖНО ВСТАВИТЬ АВАТАР ПОЛЬЗОВАТЕЛЯ</avatar_url>\n<country></country>\n<city></city>\n";
            $out .= "</user>\n";
        }
        $xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n<profiles>\n$out</profiles>";
        header('Content-type: text/xml');
        error_log("Return XML: \n$xml");
        echo $xml;
        JFactory::getApplication()->close();
    }
}//class


Эти функции я достал из файлов
аватар
Код
<?php if ($this->params->get('userImage') && !empty($this->user->avatar)): ?>
<img src="<?php echo $this->user->avatar; ?>" alt="<?php echo $this->user->name; ?>" style="width:<?php echo $this->params->get('userImageWidth'); ?>px; height:auto;" />
<?php endif; ?>

или это тоже аватор

Код
<img class="k2AdminImage" src="<?php echo JURI::root().'media/k2/users/'.$this->row->image; ?>" alt="<?php echo $this->row->name; ?>" />


вот пол пользователя

Код
$lists = array (); $genderOptions[] = JHTML::_('select.option', 'm', JText::_('K2_MALE')); $genderOptions[] = JHTML::_('select.option', 'f', JText::_('K2_FEMALE')); $lists['gender'] = JHTML::_('select.radiolist', $genderOptions, 'gender','','value','text',$user->gender);

Помогите всавить ПОЛ И АВАТАР
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Блин, откуда у вас этот файл вообще??
*

polepropilen

  • Осваиваюсь на форуме
  • 29
  • 1 / 0
Код скачал с сайта с играми nextgame.ru

Поставил К2 на Joomla 2.5
Там при регистрации появился выбор пола пользователя.

Вызов пола пользователя в К2 (com_k2)

Код
 <?php
 if ( trim( $this->user->profile->gender ) == 'm' )
  echo JText::_('M');
  else
  echo JText::_('F');
?>

 Вызов аватара в компоненте К2 (com_k2)

Код
 <?php
 if(!$avatar_url)
      $avatar_url = $this->user->profile->image;
 echo "<img src=\"/media/k2/users/$avatar_url\" >"; ?>

В (com_k2) это работает, но не работает в (com_nextgame)
помогите вставить пол пользователя и аватар.

« Последнее редактирование: 24.07.2012, 13:59:14 от polepropilen »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как добавить свой класс для страниц вывода материалов по тегу k2?

Автор Slava77

Ответов: 0
Просмотров: 4084
Последний ответ 16.02.2023, 23:29:34
от Slava77
Невозможно создать пункт меню K2

Автор vittorio

Ответов: 16
Просмотров: 3919
Последний ответ 24.01.2022, 16:16:31
от kot488
K2 свой title для каждой страницы

Автор anna9494

Ответов: 19
Просмотров: 3865
Последний ответ 27.06.2020, 15:16:59
от TYMON
Свой description в шаблоне категории или статьи

Автор lgmax

Ответов: 0
Просмотров: 1054
Последний ответ 20.11.2019, 16:42:40
от lgmax
[Решено] Свой title для категории k2

Автор lgmax

Ответов: 1
Просмотров: 1082
Последний ответ 09.10.2019, 19:06:32
от lgmax