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

ikus

  • Захожу иногда
  • 94
  • 0 / 0
Уважаемые знатоки данного форуму. Подскажите как реализовать уведомление в виде строки над списком товара о том что поставлена галочка на фильтре. Столкнулся с тем что посетители иногда забывают о том что ищут по фильтру и потом не могут понять в чем у них проблема :)
*

nevigen

  • Moderator
  • 10452
  • 863 / 25
  • http://n*****n.com
Re: Уведомление о включеном фильтре.
« Ответ #1 : 25.10.2012, 19:16:05 »
сделайте вывод в область системных сообщений месседжа, что отмечены опции фильтра (если хоть 1 чек, чекнут).
тогда при выборе и перезагрузке страницы, будет выведена надпись, типа как при "Товар добавлен в корзину", и т.д.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

ikus

  • Захожу иногда
  • 94
  • 0 / 0
Re: Уведомление о включеном фильтре.
« Ответ #2 : 25.10.2012, 19:23:53 »
А если галочка убирается? Тоже чек ставить?
*

nevigen

  • Moderator
  • 10452
  • 863 / 25
  • http://n*****n.com
Re: Уведомление о включеном фильтре.
« Ответ #3 : 25.10.2012, 19:33:10 »
если хоть 1 чекнут то выводится сообщение, если ничего не чекнуто, то и сообщения нет
могут ведь и 3 и 5 чекнуты, и оптом отменять по 1 могут
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

ikus

  • Захожу иногда
  • 94
  • 0 / 0
Re: Уведомление о включеном фильтре.
« Ответ #4 : 28.10.2012, 14:56:27 »
Т.е. это получается что в "libraries\joomla\document\html\renderer\message.php" нужно впихнуть проверку условий. Потом в index шаблона вставить: <jdoc:include type="message" /><?php  JError::raiseWarning( 100, 'Внимание! Вы включили фильтр. Полный каталог не отображается.' ); ?> или <?php JFactory::getApplication()->enqueueMessage( 'Внимание! Вы включили фильтр. Полный каталог не отображается' ); ?>. Я правильно вообще суть понимаю?
*

ikus

  • Захожу иногда
  • 94
  • 0 / 0
Re: Уведомление о включеном фильтре.
« Ответ #5 : 28.10.2012, 19:35:55 »
Я так понимаю выглядить оно будет примерно так:
Код
switch ( $_POST['checker'] ): 
    case '1': echo 'filter enabled (val 1)'; break;
    case '2': echo 'filter enabled (val 2)': break;
    default: echo 'filter disabled';
endswitch;

А как это всё дело прикрутить?
*

ikus

  • Захожу иногда
  • 94
  • 0 / 0
Re: Уведомление о включеном фильтре
« Ответ #6 : 01.11.2012, 13:05:43 »
Спасибо за ответы.
*

linykc

  • Осваиваюсь на форуме
  • 30
  • 13 / 0
Re: Уведомление о включеном фильтре
« Ответ #7 : 26.12.2012, 17:22:16 »
я для этих целей переделывал модуль фильтра по характеристикам.
примитивно но работает:
два одинаковых модуля, но с разными шаблонами.
один оставляем без переделок, а во воротом добавляем условия "если статус чекбокса cheked - отображаем его"
в итоге получаем один полный фильтр а второй выводит только отмеченные фильтры. при этом можно все это оформить как строку горизонтальную и чекбокс заменить на крестик аля "удалить фильтр"

вот както так


главное добиться чтоб модули не мешали друг другу и не конфликтовали
*

ikus

  • Захожу иногда
  • 94
  • 0 / 0
Re: Уведомление о включеном фильтре
« Ответ #8 : 12.01.2013, 03:11:57 »
А такой вариант что бы в этот код:


Код
<?php if (is_array($characteristic_displayfields) && count($characteristic_displayfields)){?>
    <div class="filter_characteristic">
    <?php foreach($characteristic_displayfields as $ch_id){?>  
        <div class="characteristic_name"><?php print $characteristic_fields[$ch_id]->name;?></div>
        <input type="hidden" name="extra_fields[<?php print $ch_id?>][]" value="0" />
        <?php if (is_array($characteristic_fieldvalues[$ch_id])){?>
            <?php foreach($characteristic_fieldvalues[$ch_id] as $val_id=>$val_name){?>
                <input type="checkbox" name="extra_fields[<?php print $ch_id?>][]" value="<?php print $val_id;?>" <?php if (is_array($extra_fields_active[$ch_id]) && in_array($val_id, $extra_fields_active[$ch_id])) print "checked";?> /> <?php print $val_name;?><br/>
            <?php }?>
        <?php }?>
        <br/>
    <?php }?>
    </div>
<?php } ?>

Влупить при проверке:

Код
JError::raiseNotice( 100, 'Уведомление! Вы включили фильтр' );}

Прокатит?
*

ikus

  • Захожу иногда
  • 94
  • 0 / 0
Re: Уведомление о включеном фильтре
« Ответ #9 : 14.01.2013, 00:37:27 »
309 просмотров о_0 и не одного ответа. Неужели никто такого себе не ставил?
« Последнее редактирование: 14.01.2013, 17:54:41 от ikus »
*

ikus

  • Захожу иногда
  • 94
  • 0 / 0
Re: Уведомление о включеном фильтре
« Ответ #10 : 22.01.2013, 03:13:26 »
Человек подсказывает вариант решения:
Код
<script type="text/javascript">
$(document).ready(function(){
 $('[type="checkbox"]').change(function() {
 $('.bb').remove();//удаляем все блоки сообщений - всегда
 var i=$('[type="checkbox"]:checked').size();//проверяем сколько отмеченных чекбоксов
 if(i>0)
{
$(this).parent().after('<div class="bb" style="float:right;">hello</div>');
}
 
});             
 });/*end  ready*/
 </script>

Помогите доработать его. Подключал jquery - не хочет работать.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Показать/скрыть характеристики в фильтре

Автор stparts

Ответов: 7
Просмотров: 1322
Последний ответ 23.11.2016, 19:53:00
от stparts
Сделать уведомление пользователя об изменении группы (статуса) за вознаграждение

Автор newjus

Ответов: 15
Просмотров: 1581
Последний ответ 16.12.2015, 21:56:29
от nevigen
Разное уведомление под разный статус заказа

Автор neonox

Ответов: 4
Просмотров: 1246
Последний ответ 20.07.2015, 14:10:09
от lev731