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

MARK2

  • Новичок
  • 3
  • 0 / 0
Подскажите, как в обзоре вывести вместо названий short name, лого команд(small logo). В шаблоне show_tip_results.tpl.php менял $hometeam->short_name на $hometeam->name, нормальные названия появляются, но когда меняю на $hometeam->small_logo, нет ни названий ни лого команд.
*

deeZ

  • Захожу иногда
  • 464
  • 33 / 0
посмотрите элементы массива print_r($match). Нет там скорее всего такого элемента. Создавайте тогда запрос к бд, чтобы выдергивал лого
*

MARK2

  • Новичок
  • 3
  • 0 / 0
deeZ, не получается, выводит не картинки лого, а пути к ним...
« Последнее редактирование: 22.03.2011, 21:35:59 от MARK2 »
*

deeZ

  • Захожу иногда
  • 464
  • 33 / 0
ну дак если пути выводит, то в чем проблема? <img src="путь" /> - и вперед
*

MARK2

  • Новичок
  • 3
  • 0 / 0
Добился чего хотел. deeZ спасибо. Только маленькие лого смотрятся не очень, сделал запрос на средние лого.

В файле show_tip_results.tpl.php заменил код...

Код
foreach($matches as $v){
      $match = new Match ($database);
     $match->load($v->match_id);
     $hometeam = new JL_Team($database);
$hometeam->load($match->matchpart1);
$guestteam = new JL_Team($database);
$guestteam->load($match->matchpart2);
      $mrl = "";

      if ($match->matchpart1_result == "") {
        $match->matchpart1_result = "-";
       }
       if ($match->matchpart2_result == "") {
        $match->matchpart2_result = "-";
       }

?>
          <td align="center"><?php echo $hometeam->name;?><br /><?php echo $match->matchpart1_result.":".$match->matchpart2_result;?><br /><?php echo $guestteam->name;?></td>

Заменил на...

Код
foreach($matches as $v){
      $match = new Match ($database);
     $match->load($v->match_id);
     $hometeam = new JL_Team($database);
$hometeam->load($match->matchpart1);
      
      $query = sprintf("SELECT logo_middle FROM #__joomleague_clubs clubs
                        LEFT JOIN #__joomleague_teams teams ON clubs.id = teams.club_id
                        WHERE teams.id = %s", $match->matchpart1);
      $database->setQuery($query);
      $hometeam_pic = $database->loadResult();
      
$guestteam = new JL_Team($database);
$guestteam->load($match->matchpart2);
      
      $query = sprintf("SELECT logo_middle FROM #__joomleague_clubs clubs
                        LEFT JOIN #__joomleague_teams teams ON clubs.id = teams.club_id
                        WHERE teams.id = %s", $match->matchpart2);
      $database->setQuery($query);
      $guestteam_pic = $database->loadResult();

      $mrl = "";

      if ($match->matchpart1_result == "") {
          $match->matchpart1_result = "-";
      }
      if ($match->matchpart2_result == "") {
          $match->matchpart2_result = "-";
      }
  
   if ($showTipResults_config['show_logo_middle_overview'] == "1") {  
    if (($hometeam_pic == "")) $hometeam_pic="images/joomleague/placeholders/placeholder_small.gif";
       $matchpart1_pic = (trim($hometeam_pic)!= "")? sprintf('<img src="%s"  title="%s"/>', $hometeam_pic,$hometeam->name ) : "";
    if (($guestteam_pic == "")) $guestteam_pic="images/joomleague/placeholders/placeholder_small.gif";
       $matchpart2_pic = (trim($guestteam_pic)!= "")? sprintf('<img src="%s"  title="%s"/>', $guestteam_pic, $guestteam->name) : "";
  ?><td align="center"><?php echo $matchpart1_pic;  ?><br /><?php echo  $match->matchpart1_result.':'.$match->matchpart2_result;?><br /><?php echo $matchpart2_pic;?><br /> </td><?php
  }else {  
   ?><td align="center"><?php echo sprintf('<img src="%s"  title="%s"/>', $hometeam_pic,$hometeam->name );?><br /><?php echo $match->matchpart1_result.":".$match->matchpart2_result;?><br /><?php echo sprintf('<img src="%s"  title="%s"/>', $guestteam_pic, $guestteam->name);?></td><?php
*

deeZ

  • Захожу иногда
  • 464
  • 33 / 0
уменьшим количество запросов к бд:
foreach($matches as $v) { $teamsId[] = $v->matchpart1;
      $teamsId[] = $v->matchpart2;}
$listTeamId = implode( ",", array_unique($teamsId) );
 $query = "SELECT clubs.logo_middle, teams.id FROM #__joomleague_clubs clubs
LEFT JOIN #__joomleague_teams teams ON clubs.id = teams.club_id WHERE teams.id IN (".$listTeamId.")";
  $database->setQuery($query);
  $pic = $database->loadObjectList('id');

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

Адаптация joomleague 3 под мобильную версию

Автор DragonbyKuzya

Ответов: 0
Просмотров: 3177
Последний ответ 05.03.2019, 11:57:49
от DragonbyKuzya
JoomLeague Module Matches предупреждение JFolder::folder:

Автор vladimir86

Ответов: 2
Просмотров: 3291
Последний ответ 02.01.2019, 11:04:00
от vladimir86
Всего стало по два после обновления до joomleague 3.0.22

Автор eu4ria

Ответов: 2
Просмотров: 3509
Последний ответ 29.12.2018, 05:11:32
от vladimir86
Работает ли joomleague на Joomla 3x?

Автор AlucarD

Ответов: 9
Просмотров: 6517
Последний ответ 06.10.2018, 13:12:20
от DragonbyKuzya
Восстановление удаленного проекта в JoomLeague - v.0.93

Автор saviv

Ответов: 1
Просмотров: 1657
Последний ответ 28.05.2018, 20:52:28
от lexxbry