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

Olga Kichina

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
В модуле "mod_virtuemart_latestprod" в блоке мне нужно вывести изображения товара в меньшем виде, чем они есть.
 
В файле ps_product.php есть функция Image_tag, которая выводит изображение товара в родном размере.
Чтобы в модуле изображение было заданных мною размеров нужно поправить некоторые места в этой функции.

Подскажите пожалуйста- кроме перовй строки, где я ставлю ширину и высоту, что еще нужно здесь поменять?

Код
function image_tag($image, $args="", $resize=1, $path_appendix='product',$thumb_width=120, $thumb_height=60 ) {
         global $mosConfig_live_site, $mosConfig_absolute_path;
         require_once( CLASSPATH . 'imageTools.class.php');
         
         $border="";
         if( strpos( $args, "border=" )===false ) {
             $border = 'border="0"';
         }
         
         
         if ($image != "") {
             // URL
             if( substr( $image, 0, 4) == "http" ) {
                 $url = $image;
                 }
             // local image file
             else {
                 if(PSHOP_IMG_RESIZE_ENABLE == '1' && $resize==1) {
                     $url = $mosConfig_live_site."/components/com_virtuemart/show_image_in_imgtag.php?filename=".urlencode($image)."&newxsize=".PSHOP_IMG_WIDTH."&newysize=".PSHOP_IMG_HEIGHT."&fileout=";
                     if( !strpos( $args, "height=" )) {
                         $arr = @getimagesize( vmImageTools::getresizedfilename( $image, $path_appendix, '', $thumb_height, $thumb_width ) );
                         $width = $arr[0]; $height = $arr[1];
                     }
                 }
                 else {
                     
                     $url = IMAGEURL.$path_appendix.'/'.$image;
                     $using_resized_image = false;   
                     if( $resize ) {
                         $image = vmImageTools::getresizedfilename( $image, $path_appendix, '', $thumb_height, $thumb_width );
                         if( file_exists($image)) {
                             $using_resized_image = true;                           
                         }
                     }
                     if( $resize && ! $using_resized_image) {
                         if( $height < $width ) {
                             $width = @round($width / ($height / PSHOP_IMG_HEIGHT));
                             $height = PSHOP_IMG_HEIGHT;
                         } else {
                             $height = @round($height / ($width / PSHOP_IMG_WIDTH ));
                             $width = PSHOP_IMG_WIDTH;
                         }
                     }
                     if( file_exists($image)) {
                         $url = str_replace( $mosConfig_absolute_path, $mosConfig_live_site, $image );
                         
                     } elseif( file_exists($mosConfig_absolute_path.'/'.$image)) {
                         $url = $mosConfig_live_site.'/'.$image;
                     }
                     
                     $url = str_replace('//', '/', $url );
                     $url = str_replace(':/', '://', $url );
                     if( !strpos( $args, "height=" ) ) {
                         $f = str_replace( IMAGEURL, IMAGEPATH, $url );
                         
                         if ( file_exists($f) ) {
                             $arr = getimagesize( $f );
                             $width = $arr[0]; $height = $arr[1];
                         } else {
                             $width = 120; $height = 60;
                         }
                         
                     }
 
                 }
                 $url = str_replace( basename( $url ), $GLOBALS['VM_LANG']->convert(basename($url)), $url );
             }
         }
         else {
             $url = VM_THEMEURL.'images/'.NO_IMAGE;
         }   
         
         return vmCommonHTML::imageTag( $url, '', '', $height, $width, '', '', $args.' '.$border );
 
     }
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Исправить подтягивание значений контактов клиента из базы SQL

Автор Nessy74

Ответов: 5
Просмотров: 1021
Последний ответ 31.12.2015, 07:05:16
от Филипп Сорокин
Возможность переключения на фронте шаблона вывода категории в VirtueMart 1.1.X

Автор aleks_yug

Ответов: 39
Просмотров: 10709
Последний ответ 31.03.2013, 14:42:38
от aleks_yug
возможность вывода в корзине свойств товара

Автор aleks_yug

Ответов: 102
Просмотров: 37527
Последний ответ 15.02.2013, 11:04:26
от kpk17
Убрать сопутствующие товары из страницы вывода товаров категории

Автор dema8912

Ответов: 1
Просмотров: 1310
Последний ответ 15.08.2012, 22:02:40
от dema8912
Изменение шаблона вывода товара в корзине

Автор meverikxp

Ответов: 1
Просмотров: 1737
Последний ответ 15.05.2012, 23:05:18
от meverikxp