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

zavarzin

  • Новичок
  • 3
  • 0 / 0
Подскажите пожалуйста, кто знает - как сделать увеличение картинки товара в browse_listtable.tpl.php - либо при наведении на значок лупы, либо при наведении курсора на уменьшенную картинку (Образец в приложенном скрине)



Мой browse_listtable.tpl.php
Код
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );

mm_showMyFileName(__FILE__); ?>

 

<?php echo $buttons_header // The PDF, Email and Print buttons ?>

<?php echo $browsepage_header // The heading, the category description ?>

<?php echo $parameter_form // The Parameter search form ?>

<?php echo $orderby_form // The sort-by, order-by form PLUS top page navigation ?>



<?php

$data =array(); // Holds the rows of products

$i = 1; $row = 0; // Counters



// Table header

$tableheader[] = $VM_LANG->_('PHPSHOP_CART_NAME');

$tableheader[] = $VM_LANG->_('PHPSHOP_CART_SKU');

if( _SHOW_PRICES && $auth['show_prices'] ) {

$tableheader[] = $VM_LANG->_('PHPSHOP_CART_PRICE');

}

$tableheader[] = $VM_LANG->_('PHPSHOP_PRODUCT_FORM_THUMB_IMAGE');

$tableheader[] = $VM_LANG->_('PHPSHOP_PRODUCT_DESC_TITLE');

if( _SHOW_PRICES && $auth['show_prices'] && USE_AS_CATALOGUE != '1' ) {

$tableheader[] = $VM_LANG->_('PHPSHOP_CART_ACTION');

}



// Creates a new HTML_Table object that will help us

// to build a table holding all the products

$table =& new HTML_Table('width="100%"');



$table->addRow( $tableheader, 'class="sectiontableheader"', 'th', true );



foreach( $products as $product ) {



foreach( $product as $attr => $val ) {

// Using this we make all the variables available in the template

// translated example: $this->set( 'product_name', $product_name );

$this->set( $attr, $val );

}



$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>';

$data[$row][] = $product['product_sku'];

if( _SHOW_PRICES && $auth['show_prices'] ) {

$data[$row][] = $product['product_price'];

}

$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'

. ps_product::image_tag( $product['product_thumb_image'] )

. '</a>'; 

$data[$row][] = $product['product_s_desc'];

if( $product['has_addtocart'] ) {

$data[$row][] = $product['form_addtocart'];

}

else {

$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'

. $product['product_details']

. '</a>';

}



$row++;



}




// Loop through each row and build the table

foreach($data as $key => $value) {



$table->addRow( $data[$key], 'class="sectiontableentry'.$i.'"', 'td', true );

$i = $i == 1 ? 2 : 1;

}

// Display the table

echo $table->toHtml();

?>

<br class="clr" /><br />

<?php echo $browsepage_footer ?>

<?php

// Show Featured Products

if( $this->get_cfg( 'showFeatured', 1 )) {

    /* featuredproducts(random, no_of_products,category_based) no_of_products 0 = all else numeric amount

    edit featuredproduct.tpl.php to edit layout */

    echo $ps_product->featuredProducts(true,10,true);

} ?>

<?php echo $recent_products ?>

*

flyingspook

  • Moderator
  • 3590
  • 247 / 9
ася есть

$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'

                  . ps_product::image_tag( $product['product_thumb_image'] )

                  . '</a>'; 


вот твоя картинка
« Последнее редактирование: 27.03.2011, 22:46:47 от flyingspook »
*

zavarzin

  • Новичок
  • 3
  • 0 / 0
где сама картинка я понял)))) как сделать чтобы  маленькая увеличивалась до полноразмерной при наведении? аська 354045156
*

zavarzin

  • Новичок
  • 3
  • 0 / 0
ася есть

$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'

                  . ps_product::image_tag( $product['product_thumb_image'] )

                  . '</a>';  


вот твоя картинка


Всё ок
« Последнее редактирование: 29.03.2011, 17:56:00 от zavarzin »
*

flyingspook

  • Moderator
  • 3590
  • 247 / 9
прикручиваешь нужный плагин (какой понравится)
и она увеличивается :)
*

xaocbozzz

  • Захожу иногда
  • 205
  • 8 / 0
  • Котэ просит! Не обижайте котэ!
Замечательно. А поподробнее?
*

xaocbozzz

  • Захожу иногда
  • 205
  • 8 / 0
  • Котэ просит! Не обижайте котэ!
Посмотрите мою тему, пожалуйста! http://joomlaforum.ru/index.php/topic,178920
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Помогите мне поместить полем SKU под Описание Продукта browse_listtable.tpl.php

Автор saudzboa

Ответов: 1
Просмотров: 1318
Последний ответ 14.02.2018, 22:44:25
от saudzboa
Модификация browse_listtable.tpl.php

Автор Servelatin

Ответов: 0
Просмотров: 1340
Последний ответ 15.05.2012, 16:23:23
от Servelatin
Помогите подправить файл browse_listtable.tpl.php

Автор hudoy

Ответов: 6
Просмотров: 3058
Последний ответ 23.05.2011, 23:45:30
от Гринвич
При наведении курсора на изображение товара...

Автор mobiland

Ответов: 4
Просмотров: 1916
Последний ответ 04.04.2011, 09:30:29
от DiAksID
Единица измерения товара product_unit . Как сделать вывод ее в browse_listtable.tpl.php

Автор Di_nax

Ответов: 0
Просмотров: 2268
Последний ответ 22.03.2011, 19:21:15
от Di_nax