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

ganzh

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
<?php defined( '_JEXEC' ) or die( 'Restricted access' ); ?>
<?php echo '<?xml version="1.0" encoding="utf-8"?'.'>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="<?php echo $this->language; ?>"
lang="<?php echo $this->language; ?>" >
<head>
<jdoc:include type="head" />
<link href="<?php echo $this->baseurl ?>/templates/transparent_bliss_1.5/css/template.css" rel="stylesheet" type="text/css" />
<?php

if ($this->params->get('showselector') == "show") {
   
   echo "<link href=\"".$this->baseurl."/templates/transparent_bliss_1.5/css/img".$this->params->get('defaultimage').".css\" rel=\"stylesheet\" type=\"text/css\" /> \n";
   
   foreach (range(1, 6) as $bgimage) {
   
      if ($this->params->get('defaultimage') != $bgimage) {
      echo "<link href=\"".$this->baseurl."/templates/transparent_bliss_1.5/css/img".$bgimage.".css\" title=\"img".$bgimage."\" rel=\"alternate stylesheet\" type=\"text/css\" /> \n";
      }
   }
   include ("imageswapper.php");
   
} else if ($this->params->get('showselector') == "random" || $this->params->get('showselector') == "modRand") {

   $randomImage  = "img";
   $randomImage .= rand(1, 6);
      echo "<link href=\"".$this->baseurl."/templates/transparent_bliss_1.5/css/".$randomImage.".css\" rel=\"stylesheet\" type=\"text/css\" /> \n";
      
} else if ($this->params->get('showselector') == "hide" || $this->params->get('showselector') == "module") {
   echo "<link href=\"".$this->baseurl."/templates/transparent_bliss_1.5/css/img".$this->params->get('defaultimage').".css\" rel=\"stylesheet\" type=\"text/css\" /> \n";
}
?>
<!--[if IE 6]>
 <style type="text/css">
 img, div, td { behavior: url(<?php echo $this->
baseurl ?>/templates/transparent_bliss_1.5/js/iepngfix.htc); }
</style>
<link href="<?php echo $this->baseurl."/templates/transparent_bliss_1.5/css/template-ie6.css";?>" rel="stylesheet" type="text/css" media="all" />
<![endif]-->
<body>
<div id="wrapper">
  <div id="headwrap">
    <div id="logo"></div>
    <div id="topbannerad"><jdoc:include type="modules" name="user5" style="xhtml" /></div>
  </div>
  <div id="leftwrap">
    <div><img src="<?php echo $this->baseurl ?>/templates/transparent_bliss_1.5/images/left-top.png" alt="top-slice" width="180" height="10" border="0" /></div>
    <div id="left">
     
      <div id="leftinner2">
        <jdoc:include type="modules" name="left" style="xhtml" />
      <jdoc:include type="modules" name="user1" style="xhtml" />
      </div>
    </div>
    <div><img src="<?php echo $this->baseurl ?>/templates/transparent_bliss_1.5/images/left-bottom.png" alt="" width="180" height="10" border="0" /></div>
  </div>
  <div  id="right">
    <div><img src="<?php echo $this->baseurl ?>/templates/transparent_bliss_1.5/images/right-top.png" border="0" alt="" width="860" height="10" border="0" /></div>
    <div id="rightinner">
      <div id="rightinner2">
        <?php
      if ($this->params->get('showselector') == "module" || $this->params->get('showselector') == "modRand") {
      ?>
        <div id="TopModule">
          <jdoc:include type="modules" name="top" style="xhtml" />
        </div>
        <?php
      } else if ($this->params->get('showselector') == "show") {
      ?>
        <center>
          <h1 style="text-align: center;">Select background</h1>
          <br />
        <?php
       
         echo "<a href=\"javascript:chooseStyle('none', 60)\" checked=\"checked\" /><img src=\"".$this->baseurl."/templates/transparent_bliss_1.5/background_images/thumb".$this->params->get('defaultimage').".jpg\" alt=\"background image ".$this->params->get('defaultimage')."\" border=\"0\" class=\"bgthumbs\" /></a> \n";
         
         foreach (range(1, 6) as $bgimage) {
         
            if ($this->params->get('defaultimage') != $bgimage) {
            echo "<a href=\"javascript:chooseStyle('img".$bgimage."', 60)\" /><img src=\"".$this->baseurl."/templates/transparent_bliss_1.5/background_images/thumb".$bgimage.".jpg\" alt=\"background image ".$bgimage."\" border=\"0\" class=\"bgthumbs\" /></a> \n";
            }
         }
        ?>       
        </center>
      <?php }   ?>

        <jdoc:include type="component" />
        <div id="BottomModule">
          <jdoc:include type="modules" name="user3" style="xhtml" />
        </div>
      </div>
    </div>
    <div><img src="<?php echo $this->baseurl ?>/templates/transparent_bliss_1.5/images/right-bottom.png" alt="" width="860" height="10" border="0" /></div>
    <div id="joomlabear"><a href="http://joomlabear.com/"><img src="<?php echo $this->baseurl ?>/templates/transparent_bliss_1.5/images/website-design-by-joomlabear.png" alt="JoomlaBear - Website Design" width="200" height="50" border="0" class="bear"  /></a></div>
  </div>
  <div id="farrightwrap">
    <div><img src="<?php echo $this->baseurl ?>/templates/transparent_bliss_1.5/images/left-top.png" alt="" width="180" height="10" border="0" /></div>
    <div id="farright">

      <div id="farrightinner2">
           <jdoc:include type="modules" name="user4" style="xhtml" />
        <jdoc:include type="modules" name="right" style="xhtml" />
      </div>
    </div>
    <div><img src="<?php echo $this->baseurl ?>/templates/transparent_bliss_1.5/images/left-bottom.png" alt="" width="180" height="10" border="0" /></div>
  </div>
</div>
</div>
</body>
</html>

Как здесь нужно в div обернуть? Почти час уже парюсь...
*

oleggrz

  • Захожу иногда
  • 435
  • 76 / 3
  • Только начал учиться.
Скиньте весь шаблон. Но гарантии что посмотрю именно завтра нет, не знаю что будет со временем, но может кто еще подтянется?
*

ganzh

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Вы имеете ввиду и css файл? или прямо папку?
*

oleggrz

  • Захожу иногда
  • 435
  • 76 / 3
  • Только начал учиться.
Весь архив.
*

ganzh

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
http://depositfiles.com/files/ellsf6htl
Здесь весь архив шаблона
*

oleggrz

  • Захожу иногда
  • 435
  • 76 / 3
  • Только начал учиться.
В css #logo и #topbannerad свойство height должно быть одинаково. Либо у обоих 90, либо у обоих 150. И с размерами вы где-то промахнулись, расстояния между левой и правой колонкой разные, но это я думаю сами найдете.
*

ganzh

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Проблема пока решилась так:
#logo {
width: 330px;
height: 150px;

#topbannerad {
float: right;
width: 728px;
height: 0px;
Но все таки а опере и эксплорере шаблон виден по разному. Скажем, если в опере между логотипом и средней колонкой давольно хорошо заметный промежуток, то в эксплорере его фоктически нет. Понимаю, что это не смертельно, но хотелось бы знать, почему такое происходит.
*

oleggrz

  • Захожу иногда
  • 435
  • 76 / 3
  • Только начал учиться.
Для #logo и #topbannerad я ставил одинаковые величины и у меня во всех браузерах одинаково. Я так понимаю, что у вас проблема возникла из-за токо, что вы не увеличили ширину для #headwrap, так и оставили 980. У вас получается, что ширина #wrapper 1250, в нем внутри #headwrap 980, а внутри #headwrap находятся #logo и #topbannerad с общей шириной 330+728=1058. Так как 1058 внутри 980 никак не поместится, то #topbannerad отжимает вниз.
А еще у вас проблема в ИЕ6. Посмотрите template-ie6.css, там указаны изображения , которые используются для ИЕ6, посмотрите что там надо изменить.
*

ganzh

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Че то непонятно, в right-mid полоска горизонтальная, а в right-mid-ie - вертикальная. #headwrap испраивл, #logo height: 90px; #topbannerad
height: 90px;  и в Опере все наладилось с заголовоком.
*

oleggrz

  • Захожу иногда
  • 435
  • 76 / 3
  • Только начал учиться.
Цитировать
Че то непонятно, в right-mid полоска горизонтальная, а в right-mid-ie - вертикальная
А если размеры посмотреть? Размер 600x6000. 600 -это ширина. А вам сколько надо?
*

ganzh

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
oleggrz, подскажите пожалста, как выровнять по цетру баннеры внутри правой и левой колонок?
*

oleggrz

  • Захожу иногда
  • 435
  • 76 / 3
  • Только начал учиться.
В css в .moduletable добавить text-align: center; и создать .moduletable h3 { text-align: center;} для выравнивания по центру заголовков этих модулей. Рекомендую хороший сайт по html и css.

все разобрался ;)
« Последнее редактирование: 04.11.2008, 17:10:12 от gylax »
*

ganzh

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Здрасьте, снова возникли проблемы с настройкой шаблона. в BootomModule есть user3, мне бы хотелось поместить туда 2 картинки и чтобы одна была слева, а вторая справа. Как расширить позицию user3 я разобрался, а как поместить туда картинки не могу понять. С помощью баннеров не хочется. Как встроить картинки в user3? И еще, как создать новую позицию в шаблоне?

Доброе время суток! Собственно проблемма! В опере глючит шаблон не знаю как попровить!Система голосования уходит в бок! В IE все отлично! Хелп пллиз!
сайт http://www.novelties.tu2.ru
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как вывести путь до шаблона с помощью API Joomla?

Автор elche

Ответов: 13
Просмотров: 15804
Последний ответ 11.09.2018, 23:48:50
от DK-Scorp
шаблон IT Newsy - By IceTheme проблема со списком.

Автор wolf34

Ответов: 4
Просмотров: 6034
Последний ответ 30.05.2017, 11:52:27
от darkghost
Стили шаблона

Автор karkan25

Ответов: 12
Просмотров: 4533
Последний ответ 21.05.2017, 16:40:32
от karkan25
Проблема с изменением логотипа штатного шаблона rhuk_milkyway Joomla_1.5

Автор Porohok

Ответов: 6
Просмотров: 4862
Последний ответ 22.03.2017, 10:34:23
от Porohok
Настройка неадаптивного шаблона

Автор Zegeberg

Ответов: 4
Просмотров: 4585
Последний ответ 21.06.2016, 00:21:06
от Zegeberg