Новости 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 Ответов
  • 2429 Просмотров

Проблема состоит в следующем: установил модуль корзины, все настроил(вид расположение и т.д.), НО при совершении покупки, с каждым разом корзина опускаеться все ниже и ниже =) В опере вообще до футера может доползти, при чем если корзину опустошить она опять поднимаеться на свое место =)). Вот файл кот. я менял для изменения корзины
components\com_virtuemart\themes\default\templates\common\minicart.tpl
Помогите пожалуйста кто может.


<div style="width:350px; height:100px;">
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );

if($empty_cart) { ?>
   
    <div style=" margin-left:50px; margin-top:70px; font:Verdana, Geneva, sans-serif medium; font-weight:900; color: #484848;">
    <?php if(!$vmMinicart) { ?>
       
        <div style=" float:right; margin-top:-130px; margin-right:40px;">
        <img src="<?php echo $mm_action_url ?>components/com_virtuemart/shop_image/ps_image/cart_logo.png" alt="VirtueMart"  border="0" /></a>
      </div>
        <br />
    <?php }
    echo $VM_LANG->_('PHPSHOP_EMPTY_CART')?>
    </div>
<?php }
else {
    // Loop through each row and build the table
    foreach( $minicart as $cart ) {       

      foreach( $cart 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 );
      }
        if(!$vmMinicart) { // Build Minicart
            ?>
         
       
            <br style="clear: both;" />
            <?php echo $cart['attributes'];
        }
    }
}
if(!$vmMinicart) { ?>
 <div style=" margin-left:100px; background:none" 
<?php } ?>
<div style=" margin-top:-100px; background:none;" >
<?php echo $total_products ?>
</div>
<div style=" margin-top:-30px; background:none;">
<?php echo $total_price ?>
</div></div>
<?php if (!$empty_cart && !$vmMinicart) { ?>
    <br/>
    <div style="margin-top:-85px; margin-left:180px;"><a href="index.php?page=shop.cart&option=com_virtuemart"><img src=     "components/com_virtuemart/shop_image/ps_image/cart_logo_full.png"  border="0" /></a>
    <div style="margin-top:-30px; text-decoration:none;"><?php echo $show_cart ?></div>
    <br/></div>

<?php }
echo $saved_cart;
?>
</div>
*

terr

  • Давно я тут
  • 824
  • 14 / 6
  • Ученик html-я
Re: Проблема с корзиной VirtueMart
« Ответ #1 : 19.12.2010, 03:48:08 »
попробой, если так же будет значет дело не в карзине

Код
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );?>
<table class="minicart_1">
<tr>
<td><b><a href="http://твой сайт.ru/index.php?option=com_virtuemart&page=shop.cart">Ваша корзина:</a></b>


<?php if($empty_cart) { ?>

<?php if(!$vmMinicart) {
echo "<strong>Корзина пуста.</strong>";
}
?>
<?php } ?>
<?php if (!$empty_cart && !$vmMinicart) {
$all_products = explode(" ",$total_products); // разделяем тект и количество товаров
echo "<a href='index.php?page=shop.cart&option=com_virtuemart&Itemid=1' class='mini_pr'><strong>Товаров: <span>".$all_products['0']."</span></strong></a><br />";

echo "<strong><b>На сумму: <span>".$total_price."</span></b></strong>";
//echo "<br />".$show_cart ;
}
//echo "<br /><span class='sv'>".$saved_cart."</span>";
?>
</td>
</tr>
</table>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Перенос с 1.5 на 3.5 + VirtueMart

Автор andrey488

Ответов: 4
Просмотров: 4015
Последний ответ 07.03.2017, 01:19:33
от SeBun
Проблема с установкой VirtueMart 1.1.4

Автор Tell

Ответов: 10
Просмотров: 8432
Последний ответ 02.01.2017, 17:28:01
от pomogu_chem_smogu
Проблемы с установкой VirtueMart

Автор inka

Ответов: 14
Просмотров: 9186
Последний ответ 03.09.2015, 01:44:49
от Amigos
mod VirtueMart latestprod способствовал появлению белого экрана

Автор smogrom

Ответов: 21
Просмотров: 4666
Последний ответ 15.01.2015, 11:50:23
от Schumaker
Русификация VirtueMart. Как ее сделать?

Автор Koriolan

Ответов: 52
Просмотров: 56485
Последний ответ 05.11.2014, 15:37:43
от Jiggy