Алексей

Алексей

Был в сети 22 августа 2020, 18:53
Заказы не принимаю
Проблему решил, добавил переменную в 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 во фронтэнде. В остальном все пересчитывается, заказу передается нужная стоимость доставки.