Почему-то не работает плагин на msOnBeforeAddToCart
Добрый день.
Пишу плагин который дает 5% скидки на определенную группу товаров. Вешаю его на событие msOnBeforeAddToCart.
В результате одна часть работает, вторая нет… хотя через print_r выводит верную цену, но в корзину все равно попадает цена без скидки… Помогите почему так происходит
Пишу плагин который дает 5% скидки на определенную группу товаров. Вешаю его на событие msOnBeforeAddToCart.
В результате одна часть работает, вторая нет… хотя через print_r выводит верную цену, но в корзину все равно попадает цена без скидки… Помогите почему так происходит
<?php
$plamgasCatsId = 10535;
$target = 6;
switch ($modx->event->name) {
case 'msOnBeforeAddToCart':
$products = $modx->getObject('msProduct', $product->get('id'));
if ($products->get('parent') == $plamgasCatsId) {
$price_product_id = $products->get('price_id_product');
$para = $products->get('para')[0];
foreach ($price_product_id as $product_id) {
$res = $modx->getObject('msProduct',$product_id);
if ($res) {
$price_sostav = $res->get('price');
$price_sum += $price_sostav;
if ($para[0] == 1) {
$price_sum = $price_sum*2;
}
}
}
$price_sale = $price_sum * 0.95;
$product->set('price', $price_sale);
//$product->set('price', $price_sum);
}
else {
$pids = $modx->getParentIds($products->get('id'), 10, array('context' => 'web'));
if (in_array($target, $pids)) {
$price_sale = $products->get('price') * 0.95;
// Вот эта строка не работает, все остальное работает корректно.
$product->set('price', $price_sale);
}
}
break;
}
Комментарии: 8
Выяснилось что вообще никаким товарам цен не меняется кроме одной категории…
Почему-то не работает лаже скрипт из документации
Почему-то не работает лаже скрипт из документации
case 'msOnBeforeAddToCart':
$product->set('price', 5555);
break;
Как выяснить причину?
а если так:
case 'msOnGetProductPrice':
$returned_values = & $modx->event->returnedValues;
$values = $modx->event->params['data'];
$returned_values['price'] = 300;
break;
А так он меняет ценник в самой карточке товара, а нужно чтобы в корзине при добавлении
а, точно, заработался, но если попробовать $returned_values = & $modx->event->returnedValues; вот это впихнуть в твой вариант?
Добавил такие строки:
Я тут плагины поотключал и выяснил что при отключении плагина msOptionPrice все работает. Но вот где он ценник перебивает ума не приложу
$returned_values = & $modx->event->returnedValues;
$values = $modx->event->params['data'];
$returned_values['price'] = $price_sale;
все равно не меняет ценник.Я тут плагины поотключал и выяснил что при отключении плагина msOptionPrice все работает. Но вот где он ценник перебивает ума не приложу
там есть такая штука как приоритет плагинов, поиграйте там со значениями, чтобы ваш плагин срабатывал после msOptionPrice
Ставил бОльший приоритет. И штука в том что в одном коде одна часть товаров нормально работает:
$products = $modx->getObject('msProduct', $product->get('id'));
if ($products->get('parent') == $plamgasCatsId) {
$price_product_id = $products->get('price_id_product');
$para = $products->get('para')[0];
foreach ($price_product_id as $product_id) {
$res = $modx->getObject('msProduct',$product_id);
if ($res) {
$price_sostav = $res->get('price');
$price_sum += $price_sostav;
if ($para[0] == 1) {
$price_sum = $price_sum*2;
}
}
}
$price_sale = $price_sum * 0.95;
$product->set('price', $price_sale);
//$product->set('price', $price_sum);
}
А другая часть, которая должна применять скидку к товарам одной категории — не работаетelse {
$pids = $modx->getParentIds($products->get('id'), 10, array('context' => 'web'));
if (in_array($target, $pids)) {
$price_sale = $product->get('price') * 0.95;
}
}
$product->set('price', $price_sale);
Выкладываю свой полный код, помогите понять почему msOptionPrice своим плагином перебивает мой, приоритеты у моего стоят выше
<?php
$plamgasCatsId = 10535;
$target = 6;
switch ($modx->event->name) {
case 'msOnBeforeAddToCart':
$products = $modx->getObject('msProduct', $product->get('id'));
if ($products->get('parent') == $plamgasCatsId) {
$price_product_id = $products->get('price_id_product');
$para = $products->get('para')[0];
foreach ($price_product_id as $product_id) {
$res = $modx->getObject('msProduct',$product_id);
if ($res) {
$price_sostav = $res->get('price');
$price_sum += $price_sostav;
if ($para[0] == 1) {
$price_sum = $price_sum*2;
}
}
}
$price_sale = $price_sum * 0.95;
}
else {
$pids = $modx->getParentIds($products->get('id'), 10, array('context' => 'web'));
if (in_array($target, $pids)) {
$price_sale = $product->get('price') * 0.95;
}
}
$product->set('price', $price_sale);
break;
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.