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

_Baltazar_

  • Новичок
  • 5
  • 0 / 0
Именно такой шаблончик нужен, простой и с слайд шоу, всего думаю страниц 15 будет, и форум.

Или есть подобные готовые.

Уже лет 15 не занимался сайтами, и не очень много времени что бы снова вникать.

Помогите, если это можно не сильно трудно сделать.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
А что именно нужно?
И да, нагуглил, но не дождался открытия демки..
*

_Baltazar_

  • Новичок
  • 5
  • 0 / 0
3guns.vv.si/


тут конечно, если нажать на кнопку форум, слайд шоу пропадает.  ну и если другие кнопки меню, то слайд шоу тоже пропадает, только на главной странице показывает.

тут, я как понял файл в тему не сбросишь, я бы файлы скинул шаблона.



*

Shustry

  • Moderator
  • 6434
  • 745 / 3
Смотрите настройки модуля. Он похоже привязан к главной странице.
*

_Baltazar_

  • Новичок
  • 5
  • 0 / 0
вот, я и задаю вопрос, в настройках, нет привязки, понятно что по пунктам меню, можно шаблон привязать, но, на главной есть слайд а на всех остальных нет.

пример генерируемого Ф. главной странице, есть такой код

      
 <div id="wrapper-slide">         
 <div id="slide">       
 <div id="slider" class="nivoSlider">       
 <img src="/templates/ashton/images/slide1.jpg" alt="image1" title="Стрелковый Клуб 3Ган Сибирь" />      
 <img src="/templates/ashton/images/slide2.jpg" alt="image1" title="Новосибирск" />         
 <img src="/templates/ashton/images/slide3.jpg" alt="image1" title="Ружье, Карабин, Пистолет" />      
 </div>   
 </div>   
 </div>

а например в странице статьи, его нет

Я не уверен, но

 <?php $menu = JSite::getMenu(); ?>                          
      <?php $lang = JFactory::getLanguage(); ?>                     
      <?php if ($menu->getActive() == $menu->getDefault($lang->getTag())) { ?>                      
      <?php if ($this->params->get( 'slidedisable' )) : ?>                    
      <?php include "slideshow.php"; ?><?php endif; ?>                         
      <?php } ?>                         
          <div id="wrapper">               
            <div id="main<?php echo $width ?>">                                                           
                  <jdoc:include type="component" />


в индех.рнр
 наверное как раз за вывод отвечает?
а вот от куда она берет параметр не показывать на других страницах?

*

Shustry

  • Moderator
  • 6434
  • 745 / 3
Отсюда:
<?php if ($menu->getActive() == $menu->getDefault($lang->getTag())) { ?>   

Закрывающий кусок условия не забудьте только тоже удалить.
*

_Baltazar_

  • Новичок
  • 5
  • 0 / 0
Большое, пребольшое Спасибо.


как, + поставить
*

ntxp

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Отсюда:
<?php if ($menu->getActive() == $menu->getDefault($lang->getTag())) { ?>   

Закрывающий кусок условия не забудьте только тоже удалить.

Если не трудно, подскажите, пожалуйста, что надо удалить именно, или поменять, чтобы слайдшоу было везде? Я PHP только начинаю изучать, и для меня это тарабащина :( :( :(
Буду премного благодарен :)
*

MPHS

  • Новичок
  • 3
  • 0 / 0
Отсюда:
<?php if ($menu->getActive() == $menu->getDefault($lang->getTag())) { ?>   

Закрывающий кусок условия не забудьте только тоже удалить.

Добрый день! Подскажите, пожалуйста, что именно нужно удалить, чтобы слайдшоу был на всех страницах? Очень прошу :<
*

Shustry

  • Moderator
  • 6434
  • 745 / 3
*

MPHS

  • Новичок
  • 3
  • 0 / 0
Код покажите

код из файла index.php

</div>             
       <?php $menu = JSite::getMenu(); ?>                           
      <?php $lang = JFactory::getLanguage(); ?>
         <?php if ($menu->getActive() == $menu->getDefault($lang->getTag())) { ?>                     
      <?php if ($this->params->get( 'slidedisable' )) : ?>    
      <?php include "slideshow.php"; ?><?php endif; ?>                          
      <?php } ?>                        
          <div id="wrapper">                
            <div id="main<?php echo $width ?>">                                                          
                  <jdoc:include type="component" />
                      <?php echo $modules_component ;?>            
            </div>      

и вот код с файла slideshow.php

<?php    
 $caption1 = $this->params->get("caption1", "Lorem ipsum dolor sit amet.");  
 $caption2 = $this->params->get("caption2", "Whenever i look into your eyes..");  
 $caption3 = $this->params->get("caption3", "You are always on my mind...");
 $image1   =   htmlspecialchars($this->params->get('image1'));
 $image2   =   htmlspecialchars($this->params->get('image2'));
 $image3   =   htmlspecialchars($this->params->get('image3'));
 $slidedisable   = $this->params->get("slidedisable");
 ?>
 
 <div id="wrapper-slide">         
 <div id="slide">        
 <div id="slider" class="nivoSlider">       
 <img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($image1); ?>" alt="image1" title="<?php echo $caption1 ?>" />      
 <img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($image2); ?>" alt="image1" title="<?php echo $caption2 ?>" />         
 <img src="<?php echo $this->baseurl ?>/<?php echo htmlspecialchars($image3); ?>" alt="image1" title="<?php echo $caption3 ?>" />      
 </div>   
 </div>  
 </div>

Благодарю!  !
*

Shustry

  • Moderator
  • 6434
  • 745 / 3
Вот начало: <?php if ($menu->getActive() == $menu->getDefault($lang->getTag())) { ?> Это удалить. А закрывающая часть где-то ниже того куска, что привели. Выглядит так: <?php } ?>   
*

MPHS

  • Новичок
  • 3
  • 0 / 0
Вот начало: <?php if ($menu->getActive() == $menu->getDefault($lang->getTag())) { ?> Это удалить. А закрывающая часть где-то ниже того куска, что привели. Выглядит так: <?php } ?>   

Спасибо огромное, всё получилось! :)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

С шаблоном it_milano 1.13.0

Автор chechelnitskiy

Ответов: 7
Просмотров: 2824
Последний ответ 14.05.2022, 18:25:39
от marksetter
Что надо скачать?

Автор tmpnikl

Ответов: 5
Просмотров: 2158
Последний ответ 20.03.2019, 14:11:09
от draff
Помогите с шаблоном Leo Lingerie

Автор street

Ответов: 4
Просмотров: 1477
Последний ответ 08.06.2017, 18:16:47
от street
С шаблоном как бы магазин

Автор virus_ostr

Ответов: 11
Просмотров: 1797
Последний ответ 28.05.2015, 10:09:06
от vegushka
Нужна помощь с шаблоном!

Автор Tula55

Ответов: 2
Просмотров: 2015
Последний ответ 30.10.2012, 12:59:47
от Morh