Динамическое изменение цены в корзине от условий доставки
Всем добрый день. Помогите разобраться, 2 дня чтения интернета не дают результата :(
Пишу свой модуль доставки СДЭК. Не могу понять как динамически поменять стоимость доставки и общую цену в корзине при расчете сдэка.
написал свой класс стоимости доставки
{«success»:true,«message»:"",«data»:{«cost»:2430}}
но при этом в самой корзине или в оформленном заказе цена остается старой. Подскажите пожалуйста как правильно обновить стоимость доставки? Перепробовал уже все что можно. Видел подобные компоненты, цену обновляют…
сайт на котором тестирую mod.2f-vsk.ru
Спасибо.
Пишу свой модуль доставки СДЭК. Не могу понять как динамически поменять стоимость доставки и общую цену в корзине при расчете сдэка.
написал свой класс стоимости доставки
<?php
//проверяем на отсутствие классов и инициализируем классы msdeliveryhandler, CalculatePriceDeliveryCdek
if(!class_exists('msDeliveryInterface')) {
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/minishop2/model/minishop2/msdeliveryhandler.class.php';
}
class msDeliveryHandlerCDEK extends msDeliveryHandler implements msDeliveryInterface {
public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
$cdekPrice = $_POST['cdekPrice'];
$fullcost = intval($cost) + intval($cdekPrice);
return $fullcost;
}
}
?>
весь сдэк считает в js и там же я вызываю ajax с пересчетом цены $.ajax({
type: "POST",
url: "/assets/components/minishop2/action.php",
data: "ms2_action=order/getcost&ctx=web&cdekPrice="+data.result.price,
success: function(msg){
$.jGrowl('Обновление цены' , { theme: 'message-system', life: 2500 });
console.log(msg);
}
});
ответ верный, получает стоимость из скрипта и прибавляет стоимость {«success»:true,«message»:"",«data»:{«cost»:2430}}
но при этом в самой корзине или в оформленном заказе цена остается старой. Подскажите пожалуйста как правильно обновить стоимость доставки? Перепробовал уже все что можно. Видел подобные компоненты, цену обновляют…
сайт на котором тестирую mod.2f-vsk.ru
Спасибо.
Комментарии: 1
Проблему решил, добавил переменную в SESSION
function getSessionPrice(cdekPrice) {
$.ajax({
type: "POST",
url: "/assets/components/customDelivery/session.php",
data: "cdekPrice=" + cdekPrice,
success: function(res) {
console.log(res);
console.log(cdekPrice);
}
});
}
<?php
//Инициализируем api modx, чтобы иметь доступ к нужной нам сессии в пространстве modx, иначе мы просто не достучимся до нее в нашем скрипте
define('MODX_API_MODE', true);
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
//проверяем действительно ли это AJAX запрос, иначе редиректим на главную
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {
$modx->sendRedirect($modx->makeUrl($modx->getOption('site_start'),'','','full'));
}
//пишем в сессию
session_start();
$_SESSION['cdekPrice'] = $_POST['cdekPrice'];
//возвращаем записанные данные для отладки (необязательно)
echo $_SESSION['cdekPrice'];
?>
<?php
//проверяем на отсутствие классов и инициализируем классы msdeliveryhandler, CalculatePriceDeliveryCdek
if(!class_exists('msDeliveryInterface')) {
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/minishop2/model/minishop2/msdeliveryhandler.class.php';
}
class msDeliveryHandlerCDEK extends msDeliveryHandler implements msDeliveryInterface {
public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
$cdekPrice = $_SESSION['cdekPrice'];
$fullcost = intval($cost) + intval($cdekPrice);
return $fullcost;
}
}
?>
В самой корзине пересчитывает только при условии переключении доставки, не разобрался как вызывать событие автоматом. Сделаю на js во фронтэнде. В остальном все пересчитывается, заказу передается нужная стоимость доставки.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.