Динамическое изменение цены в корзине от условий доставки

Всем добрый день. Помогите разобраться, 2 дня чтения интернета не дают результата :(

Пишу свой модуль доставки СДЭК. Не могу понять как динамически поменять стоимость доставки и общую цену в корзине при расчете сдэка.

написал свой класс стоимости доставки
<?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
Спасибо.
Алексей
24 мая 2018, 07:38
modx.pro
1
1 619
0

Комментарии: 1

Алексей
24 мая 2018, 20:48
0
Проблему решил, добавил переменную в 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 во фронтэнде. В остальном все пересчитывается, заказу передается нужная стоимость доставки.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1