Поменять цену у товара через плагин
У некоторых товаров есть коэффициент, мне надо менять цену в зависимости от этого.
На другом проекте смена цены работала так, но там был minishop 2.2
Сейчас в minishop 2.4 &values возвращает NULL, как быть? Какое-то другое событие появилось?
На другом проекте смена цены работала так, но там был minishop 2.2
if ($modx->event->name == 'msOnGetProductPrice') {
$values = & $modx->event->returnedValues;
};
Сейчас в minishop 2.4 &values возвращает NULL, как быть? Какое-то другое событие появилось?
Комментарии: 9
$modx->event->returnedValues
и будет пустым, пока туда кто-то что-то не запишет.Держи рабочий пример из платного msDiscount
case 'msOnGetProductPrice':
if ($modx->context->key == 'mgr') {return;}
/**
* Counts discount of current product for current user, based on rules in msDiscount component
* New price must be set in $modx->event->returnedValues['price']
*
* @var msProductData $product Object with product properties
* @var array $data Array with product properties. Can be empty!
* @var float $price Current price of product
*/
if (!isset($modx->event->returnedValues['price'])) {
$modx->event->returnedValues['price'] = $price;
}
// Get link to product price
$price = & $modx->event->returnedValues['price'];
$new_price = $msDiscount->getNewPrice($product->id, $price);
if ($new_price !== false) {
$price = $new_price;
}
break;
Обрати внимание, что в событии доступны 3 параметра: $product, $data и собственно $price
Василий, спасибо, буду смотреть.
Как используя это событие изменить не только $price но и $old_price?
Теперь есть событие msOnGetProductFields:
<?php
switch($modx->event->name) {
case 'msOnGetProductFields':
$returned_values = & $modx->event->returnedValues;
$values = $modx->event->params['data'];
$returned_values['price'] = $values['price'] * 2;
$returned_values['old_price'] = $values['price'] * 3;
$returned_values['article'] = 'custom_article';
$returned_values['weight'] = 222;
break;
}
Игорь, подскажи, пожалуйста, как правильно работать с этим событием? Почему-то на странице не выводятся обработанные старая и новая цены.
Создал плагин, навесил событие «msOnGetProductFields», в логи пишет корректно, а на странице исходные цены отображаются…
Создал плагин, навесил событие «msOnGetProductFields», в логи пишет корректно, а на странице исходные цены отображаются…
<?php
switch($modx->event->name) {
case 'msOnGetProductFields':
$returned_values = & $modx->event->returnedValues;
$values = $modx->event->params['data'];
$returned_values['price'] = $values['price'] * 2;
$returned_values['old_price'] = $values['old_price'] * 2;
$modx->log(1,'returned_price - ' . $returned_values['price'] ); //30
$modx->log(1,'returned_old_price - ' . $returned_values['old_price'] ); //60
$modx->log(1,'values_price - ' . $values['price'] ); //15
$modx->log(1,'values_old_price - ' . $values['old_price'] ); //30
break;
}
Может у тебя другие плагины перезаписывают (например на. msOnGetProductPrice)?
Ничего не нашел. В таблице «site_plugin_events» только мой плагин.
Даже обновил MS2 на другом сайте до последней версии, чтобы протестировать. Не работает и там… Может на 2.8.1-pl нужен какой дополнительный бубен?
Даже обновил MS2 на другом сайте до последней версии, чтобы протестировать. Не работает и там… Может на 2.8.1-pl нужен какой дополнительный бубен?
У меня на 2.8.1-pl работает
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.