Новости 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 Ответов
  • 2008 Просмотров
*

AlexFR

  • Осваиваюсь на форуме
  • 18
  • 1 / 0
Собственно вопрос - задал статьям теги, при поиске по тегам выводиться название статьи, где размещена, а вот автора нет, можно ли как-то вывести ещё и автора статьи?
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Для вывода результатов поиска используется шаблон components/com_k2/templates/generic.php

Автора там не предусмотрели, попробуйте воткнуть.
Можете для начала вставить где-нибудь в этом цикле
Код
foreach($this->items as $item)

var_dump($item);

и посмотреть - доступна ли в этом объекте вообще какая-нибудь инфа об авторе, на память не помню
*

AlexFR

  • Осваиваюсь на форуме
  • 18
  • 1 / 0
Если вставляю var_dump($item); то ссылка на авторе например Иванов, ведёт не на все статьи Иванова, а выбрасывает на главную страницу сайта, но сам автор в поске по тегам не появился. Вообще я не силён ни php ни HTML, поэтому может чё не так вставляю, вот мой код
Код
// no direct access
defined('_JEXEC') or die('Restricted access');

?>

<!-- Start K2 Generic Layout -->
<div id="k2Container" class="genericView<?php if($this->params->get('pageclass_sfx')) echo ' '.$this->params->get('pageclass_sfx'); ?>">

<?php if($this->params->get('show_page_title')): ?>
<!-- Page title -->
<div class="componentheading<?php echo $this->params->get('pageclass_sfx')?>">
<?php echo $this->escape($this->params->get('page_title')); ?>
</div>
<?php endif; ?>

<?php if($this->params->get('userFeed')): ?>
<!-- RSS feed icon -->
<div class="k2FeedIcon">
<a href="<?php echo $this->feed; ?>" title="<?php echo JText::_('Subscribe to this RSS feed'); ?>">
<span><?php echo JText::_('Subscribe to this RSS feed'); ?></span>
</a>
<div class="clr"></div>
</div>
<?php endif; ?>

<?php if(count($this->items)): ?>
<div class="genericItemList">
<?php foreach($this->items as $item): ?>

<!-- Start K2 Item Layout -->
<div class="genericItemView">

<div class="genericItemHeader">
<?php if($item->params->get('genericItemDateCreated')): ?>
<!-- Date created -->
<span class="genericItemDateCreated">
<?php echo JHTML::_('date', $item->created , JText::_('DATE_FORMAT_LC2')); ?>
</span>
<?php endif; ?>

 <?php if($item->params->get('genericItemTitle')): ?>
 <!-- Item title -->
 <h2 class="genericItemTitle">
  <?php if ($item->params->get('genericItemTitleLinked')): ?>
<a href="<?php echo $item->link; ?>">
  <?php echo $item->title; ?>
  </a>
  <?php else: ?>
  <?php echo $item->title; ?>
  <?php endif; ?>
 </h2>
 <?php endif; ?>
 </div>

 <div class="genericItemBody">
 <?php if($item->params->get('genericItemImage') && !empty($item->imageGeneric)): ?>
 <!-- Item Image -->
 <div class="genericItemImageBlock">
 <span class="genericItemImage">
   <a href="<?php echo $item->link; ?>" title="<?php if(!empty($item->image_caption)) echo $item->image_caption; else echo $item->title; ?>">
    <img src="<?php echo $item->imageGeneric; ?>" alt="<?php if(!empty($item->image_caption)) echo $item->image_caption; else echo $item->title; ?>" style="width:<?php echo $item->params->get('itemImageGeneric'); ?>px; height:auto;" />
   </a>
 </span>
 <div class="clr"></div>
 </div>
 <?php endif; ?>
 
 <?php if($item->params->get('genericItemIntroText')): ?>
 <!-- Item introtext -->
 <div class="genericItemIntroText">
  <?php echo $item->introtext; ?>
 </div>
 <?php endif; ?>

 <div class="clr"></div>
 </div>
 
 <div class="clr"></div>
 
 <?php if($item->params->get('genericItemExtraFields') && count($item->extra_fields)): ?>
 <!-- Item extra fields -->  
 <div class="genericItemExtraFields">
  <h4><?php echo JText::_('Additional Info'); ?></h4>
  <ul>
<?php foreach ($item->extra_fields as $key=>$extraField): ?>
<li class="<?php echo ($key%2)? "odd" : "even"; ?> type<?php echo ucfirst($extraField->type); ?> group<?php echo $extraField->group; ?>">
<span class="genericItemExtraFieldsLabel"><?php echo $extraField->name; ?></span>
<span class="genericItemExtraFieldsValue"><?php echo $extraField->value; ?></span>
</li>
<?php endforeach; ?>
</ul>
   <div class="clr"></div>
 </div>
 <?php endif; ?>
 
<?php if($item->params->get('genericItemCategory')): ?>
<!-- Item category name -->
<div class="genericItemCategory">
<span><?php echo JText::_('Published in'); ?></span>
<a href="<?php echo $item->category->link; ?>"><?php echo $item->category->name; ?></a>
</div>
<?php endif; ?>

<?php if ($item->params->get('genericItemReadMore')): ?>
<!-- Item "read more..." link -->
<div class="genericItemReadMore">
<a class="k2ReadMore" href="<?php echo $item->link; ?>">
<?php echo JText::_('Read more...'); ?>
</a>
</div>
<?php endif; ?>

<div class="clr"></div>
</div>
<!-- End K2 Item Layout -->

<?php endforeach; ?>
</div>

<!-- Pagination -->
<?php if($this->pagination->getPagesLinks()): ?>
<div class="k2Pagination">
<?php echo $this->pagination->getPagesLinks(); ?>
<div class="clr"></div>
<?php echo $this->pagination->getPagesCounter(); ?>
</div>
<?php endif; ?>

<?php endif; ?>

</div>
<!-- End K2 Generic Layout -->
если можно, то ткните куда правильно вставить.

В категории автора FireBug  показывает как
 
Код
<span class="catItemAuthor">
Автор:
<a href="/index.php/бла бла бла/itemlist/user/64-ivanov.html">Иванов</a>
</span>
может как-то так вывести и в поиске по тегам?
« Последнее редактирование: 07.05.2011, 17:21:07 от AlexFR »
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Если вставляю var_dump($item); ... но сам автор в поске по тегам не появился.

И не должен был )))
Это было предложено для того, чтобы выяснить, доступны ли вообще в результатах поиска по тегам в объекте $item данные автора, чтобы потом рисовать что-то наподобие того, что Вы привели для шаблона itemlist

А доступно нам там следующее

["created_by"]             - id автора
["created_by_alias"]     - псевдоним автора

Так что если делать проще, чем в шаблоне категории - без обращения к K2HelperUtilities и формирования ссылки на автора и его материалы
(то есть псевдоним автора простым текстом), то можно например после строки 42 (после <div class="genericItemHeader">) вставить что-нибудь наподобие:
         
Код
<span class="catItemAuthor">
<?php echo $item->created_by_alias; ?>
</span>
<br />
« Последнее редактирование: 07.05.2011, 18:39:12 от SDKiller »
*

AlexFR

  • Осваиваюсь на форуме
  • 18
  • 1 / 0
Спасибо! автор появился, если в админке указать его псевдоним. Теперь засада в другом. Если в категории с материалами выбрать все статьи автора, то перебрасывает на главную сайта, может можно как-то исправить, чтоб при выбора автора, выводились все его статьи.
Извините что загружаю Вас, ибо сам я точно не додумаюсь как правильно сделать. 

PS Если включить псевдоним, то возможность выбрать все статьи автора по клику на авторе пропадает, если отключить появляется, с чем это может быть связано?
« Последнее редактирование: 07.05.2011, 19:05:41 от AlexFR »
*

Desman

  • Новичок
  • 9
  • 0 / 0
Решения не нашлось? У меня просто таже фигня j1.7 K2 2.5
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как на странице автора K2 изменить title и description?

Автор Slava77

Ответов: 4
Просмотров: 2834
Последний ответ 26.12.2022, 21:11:51
от Slava77
Содержание (оглавление) статьи для k2

Автор windroseby

Ответов: 11
Просмотров: 1145
Последний ответ 30.09.2020, 17:08:49
от windroseby
Свой description в шаблоне категории или статьи

Автор lgmax

Ответов: 0
Просмотров: 1051
Последний ответ 20.11.2019, 16:42:40
от lgmax
Вывести пустые доп поля К2 Joomla 3

Автор face2005

Ответов: 0
Просмотров: 911
Последний ответ 07.03.2019, 13:32:08
от face2005
Как вывести последние материалы на главную в 4 колонки?

Автор sergspb

Ответов: 4
Просмотров: 1075
Последний ответ 18.02.2019, 15:44:21
от Den JW