Вывод стоимости доставки в minishop2 на Modx Revolution

Вывод стоимости доставки в minishop2 на Modx Revolution

Добрый день. Я столкнулся с проблемой вывода стоимости доставки в чанке tpl.msOrder при создании интернет-магазина на minishop2 в Modx Revolution. Нашёл решение и хочу им с вами поделиться, да и просто для себя выложить, чтобы не забыть.

Так вот, чтобы вывести стоимость доставки для начала нужно подключить скрипт после </body>

	<script>
miniShop2.Order.deliveryCost = '#ms2_delivery_cost';

miniShop2.Callbacks.Order.getcost.response.success = function(response) {

    var rdc = response.data['delivery_cost'];

    if(rdc) $(miniShop2.Order.deliveryCost, miniShop2.Order.order).text(miniShop2.Utils.formatPrice(rdc));
    else $(miniShop2.Order.deliveryCost, miniShop2.Order.order).text('0');
}

miniShop2.Callbacks.Order.getcost.response.error = function(response) {

    var cost = response.data['cost'];

    $(miniShop2.Order.orderCost).text(miniShop2.Utils.formatPrice(cost));
    $(miniShop2.Order.deliveryCost, miniShop2.Order.order).text('0');
}

miniShop2.Callbacks.Order.add.response.success = function(response) {
     miniShop2.Order.getcost();
    }
</script>

Подключаем именно после закрытия для того, чтобы точно запустить скрипт после скрипта minshop2

Далее идем в components/minishop2/custom/order и создаем там файл mscustomorderhandler.class.php с кодом

<?php
if(!class_exists('msOrderInterface')) {
	require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msorderhandler.class.php';
}

class detaliOrderHandler extends msOrderHandler implements msOrderInterface {

	public function getCost($with_cart = true, $only_cost = false)
    {
        $response = $this->ms2->invokeEvent('msOnBeforeGetOrderCost', array(
            'order' => $this,
            'cart' => $this->ms2->cart,
            'with_cart' => $with_cart,
            'only_cost' => $only_cost,
        ));
        if (!$response['success']) {
            return $this->error($response['message']);
        }

        $cart = $this->ms2->cart->status();
        $cost = $with_cart
            ? $cart['total_cost']
            : 0;

        /** @var msDelivery $delivery */
        if (!empty($this->order['delivery']) && $delivery = $this->modx->getObject('msDelivery',
                $this->order['delivery'])
        ) {
            $cost = $delivery->getCost($this, $cost);
            $deliveryCost = $delivery->getCost($this, 0);//Добавил переменную где получаем price доставки
        }

        /** @var msPayment $payment */
        if (!empty($this->order['payment']) && $payment = $this->modx->getObject('msPayment',
                $this->order['payment'])
        ) {
            $cost = $payment->getCost($this, $cost);
        }

        $response = $this->ms2->invokeEvent('msOnGetOrderCost', array(
            'order' => $this,
            'cart' => $this->ms2->cart,
            'with_cart' => $with_cart,
            'only_cost' => $only_cost,
            'cost' => $cost,
        ));
        if (!$response['success']) {
            return $this->error($response['message']);
        }
        $cost = $response['data']['cost'];

        return $only_cost
            ? $cost
            : $this->success('', array('cost' => $cost, 'delivery_cost'=>$deliveryCost));
    }
    
}

Регистрируем плагин, выполнив в Concole код

<?php if ($miniShop2 = $modx->getService('miniShop2')) { $miniShop2->addService('order', 'detaliOrderHandler', '{core_path}components/minishop2/custom/order/mscustomorderhandler.class.php' ); }

Если вы не знаете что такое Concole

Concole, это дополнение, которое нужно скачать и установить, затем перейти в Пакеты/Concole, вставить вышеуказанный код и нажать "Выполнить"

Затем идем в Системные настройки/События и присваиваем ключу ms2_order_handler_class значение detaliOrderHandler.

Ну и осталось просто вывести переменную стоиомости доставки

Стоимость доставки: <span id="ms2_delivery_cost"></span> руб.

Если вы всё сделали правильно, то должна выводить стоимость доставки, которую вы указали в настройках minishop2 в раздели "Способы доставки". Стоимость будет менятся без перезагрузки страницы, если вы будет переключаться между доставками с разной стоимостью.

Помогла статья? Угости чашечкой кофе =)

Если вы не видите кнопку "Скачать"
отключите блокировщик рекламы

Комментарии ()

    Похожие статьи