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

scaners

  • Захожу иногда
  • 131
  • 15 / 0
Здравствуйте.

Вопрос такой. В галерее можно сделать, рядом с категориями "висело" выделение, когда в нее (категорию), залиты новые изображения. А как можно сделать, чтобы такое же висело на каждом новом изображении в категории некоторое время (к примеру сутки)?
*

beliyadm

  • Moderator
  • 9758
  • 1665 / 66
  • Севастополь, Россия
можно, добавив небольшой хак в код галереи (проверку на дату загрузки), готового не встречал
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

scaners

  • Захожу иногда
  • 131
  • 15 / 0
можно, добавив небольшой хак в код галереи (проверку на дату загрузки), готового не встречал
А вы знаете как этот хак делается? Потому что то, что для этого нужен хак, я догадывался.
*

beliyadm

  • Moderator
  • 9758
  • 1665 / 66
  • Севастополь, Россия
как делается знаю, в запрос, который вытягивает собственно картинки добавляется выборка даты создания (если ее там уже нет, не помню), при выводе картинки делается проверка на совпадение текущей даты и заданного периода.
Готовый код конечно не дам, но схема такая вот :)
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

scaners

  • Захожу иногда
  • 131
  • 15 / 0
Готовый код конечно не дам, но схема такая вот :)
Ну а если продать?
*

beliyadm

  • Moderator
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Стучись в личку :)
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

beliyadm

  • Moderator
  • 9758
  • 1665 / 66
  • Севастополь, Россия
посмотрел - даже деньги брать стыдно :)
файл datsogallery.php, находим строку (если включены графические уведомители на JS, если нет - то аналогичную в соседнем условии)
echo "onmouseout=\"return nd();\"><img src='$thumbnailpath$row1->imgthumbname' style='".$ad_imgstyle."' alt='".$tle."' /></a><br />";
и прямо под ней добавляем код
    //start NEW indicator
    
$today strtotime ('now');
    
$diff intval(($today $row1->imgdate) / $ad_periods);
	
if (!
$diff) {
	
	
echo 
"<a onmouseover=\"return overlib('Новое изображение')\" onmouseout=\"return nd();\"><img src='$gallerypath/images/new.gif' width='16' height='11' align='top' border='0' hspace='6' alt='' /></a>";
	
	
} else {}
    
//end NEW indicator

Расположением индикатора играть на свое усмотрение, я поместил под картинкой.
Индикация "NEW" работает для того же периода, что и для категории, по умолчанию - день
« Последнее редактирование: 12.08.2008, 22:33:10 от beliyadm »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

scaners

  • Захожу иногда
  • 131
  • 15 / 0
Огромное спасибо за помощь в решении данного вопроса! +1
*

tim0n

  • Осваиваюсь на форуме
  • 40
  • 1 / 0
Тему о модуле mod_snx_scroller_datsogallery закрыли, напишу здесь.
Как сделать так? чтобы в этом модуле тоже выводилась пометка "new" если в галерее есть новые фотки?
а то приходится публиковать новость на главной странице, что в галерею добавили новые фотки, а это неудобно.

Т.е.
Код
$new =  ??? ;
if ($new) {
    echo "<a onmouseover=\"return overlib('Новое изображение')\" onmouseout=\"return nd();\"><img src='$gallerypath/images/new.gif' width='16' height='11' align='top' border='0' hspace='6' alt='' /></a>";
}

В галерее есть функция
Код
function GetNewPics ($cat)
но ей нужно передать id категории, а как полчить список всех категории?
чтобы можно было сделать что нить подобное
Код
foreach($cats as $cat) {
    if (GetNewPics($cat)) {
        $new = 1;
        break;
    }
}
*

roma-sever

  • Осваиваюсь на форуме
  • 33
  • 0 / 0
Подскажите а как выставить срок действия значка NEW???Заранее благодарен!
*

SiG

  • Новичок
  • 9
  • 0 / 0
Конфигурация DatsoGallery -> Опции -> Список периодов:
Выбираете любой
*

selimoff

  • Захожу иногда
  • 243
  • 16 / 0
  • heads up!!!
Спасибо!!!!
JNavigation скачать Здесь
*

AstraZak

  • Осваиваюсь на форуме
  • 23
  • 0 / 0
На 1.8.3 не работает, кто-нить может помоч?
И что вы над картинкой отображалось название, на сколько я понимаю это из той же оперы.
« Последнее редактирование: 16.10.2009, 16:16:53 от AstraZak »
*

roma-sever

  • Осваиваюсь на форуме
  • 33
  • 0 / 0
На 1.8.3 не работает, кто-нить может помоч?
И что вы над картинкой отображалось название, на сколько я понимаю это из той же оперы.
Да хорошо бы такое сотворить!+5
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться