Skip to content

Instantly share code, notes, and snippets.

@iksecreeet
Forked from OlegShchavelev/index.js
Created March 31, 2017 21:52
Show Gist options
  • Save iksecreeet/9e25c44e19bcc12cec3f8331cd1bbd29 to your computer and use it in GitHub Desktop.
Save iksecreeet/9e25c44e19bcc12cec3f8331cd1bbd29 to your computer and use it in GitHub Desktop.
Стоимость доставки отдельной строкой в Minishop2 (после </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>
<span id="deliveryprice">Стоимость доставки: <span id="ms2_delivery_cost"></span> руб.</span>
<?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));
}
}
@nikol11
Copy link

nikol11 commented Aug 10, 2018

Супер! Очень долго искал как реализовать эту задумку. Автору рекомендую написать пост с решением где-нибудь на modx.pro.

@rgbplus
Copy link

rgbplus commented Oct 10, 2018

Дайте код, что бы правильно зарегистрировать класс?

@ig0r74
Copy link

ig0r74 commented Dec 3, 2018

Дайте код, что бы правильно зарегистрировать класс?

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment