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

darknefrit

  • Захожу иногда
  • 61
  • 1 / 0
  • Мечтай так как будто будешь жить вечно
Делал для себя, т.к. бесит постоянно заходить в каждый заказ, туда сюда обратно :))) Типа аккордеона.
В  administrator\templates\isis/index.php
подключаем стиль шрифта:
$doc->addStyleSheetVersion('/templates/ja_bookshop/fonts/font-awesome/css/font-awesome.min.css');

administrator\components\com_jshopping\views\orders\tmpl/list.php

в таблицу добавляем в заголовок ячейку одну например после 
<th width="20">
#
</th>
Добавить:
     <th width="20">
       Жми
     </th>
Чуть ниже после
<td>
   <?php echo $pageNav->getRowOffset($i);?>
  </td>
Добавить:
<td>
<a  href = "index.php?option=com_jshopping&controller=orders&task=show&order_id=<?php echo $row->order_id?>" class="btn btn-primary order_show" data-orderids='<?php echo $row->order_id?>'><i class="fa fa-plus"></i></a> 
</td>

Ниже перед
<?php
   $i++;
   }
   ?>

добавил
<tr data-orderid='<?php echo $row->order_id?>'>
        <td colspan="12" style="padding:0; border:0">
        <div class="loaderitem_<?php echo $row->order_id?>"></div>
        <div class="hid order_info_<?php echo $row->order_id?>"></div>
        </td>
   </tr>
в самом низу после всего добавить скрипт:

<script>


  jQuery(".order_show").on("click", function(){
      var orderid = jQuery(this).data('orderids');
      var toLoad = jQuery(this).attr('href');
      jQuery(this).children().toggleClass('fa-plus fa-minus');
      var link = toLoad;




if (jQuery('.order_info_'+orderid).is('.hid')){
 
   jQuery('.loaderitem_'+orderid).html('<div class="alert alert-info loaderorder ">Загружаем заказ <i class="fa fa-spinner fa-spin"></i></div>');

      jQuery('.order_info_'+orderid).load(link + ' .order_items', function(){
      jQuery('.order_info_'+orderid).removeClass('hid').addClass('sho').slideDown("slow");
      jQuery('.loaderitem_'+orderid).empty();
             
  });
 } else if (jQuery('.order_info_'+orderid).is('.sho')){
 jQuery('.order_info_'+orderid).slideUp("slow").removeClass('sho').addClass('hid');
 jQuery('.order_info_'+orderid).empty();
 };

    return false;
});
</script>

Далее administrator\components\com_jshopping\views\orders\tmpl/show.php

в районе 145 строки, там где начинается таблица с адресом
вставляем
<div class="order_items">
чуть изменяем <table width="39%" style="float:left; border:1px solid #ddd">

Дополнительный Адрес доставки я не использую поэтому полностью закоментировал таблицу с адресом доставки.

Где начинается таблица с заказом удалил <br> перед <table..>
добавляем <div class="order_item"> и меняем на
<table class="table table-striped "  style="float:right; border:1px solid #ddd">

в ячейку с названием добавил картинку товара(по жеанию)
 <img style="width:50px;" src="/components/com_jshopping/files/img_products/<?php echo $item->thumb_image;?>" alt="">

почти в самом низу перед <div class="order_stat_file_download_clear"> доавляем два раза </div>

и в CSS шаблона админки добавляем
[class^="order_info_"]{
   display: none;
}

.loaderorder{
   display: block;
   width: 100%;
   text-align: center;
   font-size: 16px;

}

.order_items {
    border: 1px solid #CFCFCF;
    width: 100%;
    float:left;
}
.order_item {
    width: 60%;
    float:right;
}


Вроди ничего не забыл
скрин http://take.ms/HBh4m
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Быстрый росмотр заказа в админк
« Ответ #1 : 28.05.2014, 22:46:48 »
Простыня, наверное, полезная, но вы бы убрали ее под спойлером.
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Поиск заказа по номеру телефона клиента

Автор Shiffer

Ответов: 19
Просмотров: 3192
Последний ответ 07.12.2021, 19:43:38
от anatol81n
Имеется ли решения дополнительного статуса заказа?

Автор dss

Ответов: 5
Просмотров: 1112
Последний ответ 17.08.2021, 09:14:35
от nevigen
Отправка сообщения админу в не зависимости от статуса заказа

Автор newalex

Ответов: 4
Просмотров: 744
Последний ответ 23.04.2021, 10:30:56
от newalex
Уведомления о смене статуса заказа

Автор anny_k

Ответов: 10
Просмотров: 1126
Последний ответ 04.12.2020, 21:01:24
от nevigen
Вытащить номер и сумму заказа на страницу "Спасибо за заказ"

Автор turbolamer

Ответов: 70
Просмотров: 14122
Последний ответ 01.11.2020, 23:02:54
от Kokshetau