Cтоимость способа доставки в MS2
Всем привет!
В стандартном чанке tpl.msOrder.outer MiniShop2 есть такой блок:
Подскажите пожалуйста как вывести отдельно стоимость доставки?
В стандартном чанке tpl.msOrder.outer MiniShop2 есть такой блок:
<h3>[[%ms2_frontend_order_cost]]: <span id="ms2_order_cost">[[+order_cost:default=`0`]]</span>
[[%ms2_frontend_currency]]</h3>
в placeholder [[+order_cost]] уже включена стоимость выбранного способа доставки.Подскажите пожалуйста как вывести отдельно стоимость доставки?
Комментарии: 15
Стоимость доставки: <span id="ms2_delivery_cost">[[+delivery_cost]]</span> руб.
Игорь, спасибо большое за ответ.
Я вставил это span в чанк tpl.msOrder.outer MiniShop2, но значение [[+delivery_cost]] пусто.
Я вставил это span в чанк tpl.msOrder.outer MiniShop2, но значение [[+delivery_cost]] пусто.
У меня работает. Вот чанк целиком:
<form class="form-horizontal ms2_form" id="msOrder" method="post">
<div class="row">
<div class="col-md-6 basketcol" id="recieve_data">
<h3>Данные получателя:</h3>
<div class="form-group input-parent">
<label class="col-sm-4 control-label" for="email"><span class="required-star">*</span> Email</label>
<div class="col-sm-6">
<input type="email" id="email" placeholder="[[%ms2_frontend_email]]" name="email" value="[[!GET?param=`mail`]][[+email]]" class="form-control field [[+errors.email]]">
</div>
</div>
<div class="form-group input-parent">
<label class="col-sm-4 control-label" for="phone"><span class="required-star">*</span> Телефон</label>
<div class="col-sm-6">
<input type="text" id="phone" placeholder="[[%ms2_frontend_phone]]" name="phone" value="[[!GET:stripString=`+`?param=`tel`]][[+phone]]" class="form-control field [[+errors.phone]]">
</div>
</div>
<div class="form-group input-parent">
<label class="col-sm-4 control-label" for="comment"><span class="required-star">*</span> Комментарий</label>
<div class="col-sm-6">
<textarea name="comment" id="comment" placeholder="[[%ms2_frontend_comment]]" class="form-control [[+errors.comment]]">[[+comment]]</textarea>
</div>
</div>
</div>
<div class="col-md-6 basketcol1" id="deliveries">
<h3>Варианты доставки:</h3>
<div class="form-group">
<label class="col-sm-4 control-label" ><span class="required-star">*</span> Выберите доставку</label>
<div class="col-sm-6">
[[+deliveries]]
</div>
</div>
[[!msOrderSpot?
&limit=`300`
&firstName=`Введите название`
]]
<div class="form-group input-parent">
<label class="col-sm-4 control-label" for="region"><span class="required-star">*</span> Дата доставки</label>
<div class="col-sm-6">
<input type="date" id="region" placeholder="Введите дату доставки" name="region" value="[[+region]]" class="form-control field [[+errors.region]]">
</div>
</div>
</div>
</div>
<div id="result-cart">
<div class="col-md-offset-2">
<span id="deliveryprice">Стоимость доставки: <span id="ms2_delivery_cost">[[+delivery_cost]]</span> руб.</span>
<span id="ms2_delivery_notify">[[+delivery_notify]]</span>
<span id="ms2_delivery_error">[[+delivery_error]]</span>
<span id="ms2_spot_description">[[+spot_description]]</span>
<span id="ms2_spot_address">[[+spot_address]]</span>
<span id="totalprice">Итого, с доставкой: <span id="ms2_order_cost">[[+order_cost:default=`0`]]</span> руб.</span>
<span style="font-size: 18px;">Хотите оформить заказ?</span> <button type="submit" name="ms2_action" value="order/submit" class="buylink ms2_link">Да!</button>
</div>
</div>
</form>
Разобрался в чем дело) У вас видимо кастомный класс msorderhandler.class.php
Я добавил свой класс наследовал его от msOrderHandler и переопределил метод getCost() добавил в код пару строчек смотри комментарии:
Я добавил свой класс наследовал его от msOrderHandler и переопределил метод getCost() добавил в код пару строчек смотри комментарии:
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));//Добавил deliveryCost
}
Далее добавил скрипт на страницу заказа: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();
}
и в чанке tpl.msOrder.outer вставил span <span id="deliveryprice">Стоимость доставки: <span id="ms2_delivery_cost"></span> руб.</span>
При таком раскладе placeholder [[+delivery_cost]] ненужен, я думаю что такого placeholdera в ms2 нет. delivery_cost есть в схеме БД (core/components/minishop2/model/schema/minishop2.mysql.schema.xml) ms2 больше ни где не видел)
Отлично! Да, у меня msOrder установлен.
Что то у меня не работает этот вариант. Версия minishop 2.4.17-pl
Пишет 0 всегда, даже если доставка указана…
Пишет 0 всегда, даже если доставка указана…
Может кастомный класс не зарегистрирован?
Возможно… но у меня зарегистрирован класс доставки
я в него просто код вставляю, но не хочет отдельно доставка выводится… пишет 0 и все…
я в него просто код вставляю, но не хочет отдельно доставка выводится… пишет 0 и все…
метод getCost класса доставки не передает стоимость доставки на страницу заказа. Это делает класс msOrder, который в своем методе getCost складывает ее со стоимостью товаров в корзине и выводит на страницу заказа.
Я вот теперь запутался, как мне грамотно прописать, чтобы все работало… мне нужно чтобы мой расширенный класс тоже работал
В ms2 у доставки в поле Класс-обработчик ведь только один класс можно выбрать…
В ms2 у доставки в поле Класс-обработчик ведь только один класс можно выбрать…
Через кастомный msOrder и небольшие изменения в JS. Кастомный msOrder регистрируется в разделе minishop2 системных настроек.
Либо переопределить сам класс, написав кастомный, либо переопределить только метод getCost в кастомном классе, что логичнее.
Метод подключения кстомного класса из инструкции не работает. Поэтому в графу «класс обработчик заказа» нужно вписать название вашего кастомного класса.
Метод подключения кстомного класса из инструкции не работает. Поэтому в графу «класс обработчик заказа» нужно вписать название вашего кастомного класса.
И еще стоит упомянуть, что раз уж метод из инструкции не работает и мы пользуемся старым методом подключения кастомного класса, то соответствующий файл должен лежать в директории core\components\minishop2\custom\order
Всем привет!
Что-то я запутался… У меня метод getCost кастомного класса доставки возвращает на страницу оформления заказа Полную стоимость заказа со стоимостью доставки. При этом, как пишет Юрий, метод getCost кастомного класса msOrder также возвращает сумму стоимости доставки и стоимость товаров в корзине.
Как же по «фэншую» вернуть на страницу оформления заказа стоимость доставки отдельно от полной стоимости заказа с доставкой?
Я использовал «Метод подключения кастомного класса из инструкции».
где cost = 1149 (Стоимость всех товаров в корзине $cart['total_cost']) + 300 (стоимость доставки $xxx), delivery = 7 (id способа доставки в minishop2)
Что-то я запутался… У меня метод getCost кастомного класса доставки возвращает на страницу оформления заказа Полную стоимость заказа со стоимостью доставки. При этом, как пишет Юрий, метод getCost кастомного класса msOrder также возвращает сумму стоимости доставки и стоимость товаров в корзине.
Как же по «фэншую» вернуть на страницу оформления заказа стоимость доставки отдельно от полной стоимости заказа с доставкой?
Я использовал «Метод подключения кастомного класса из инструкции».
class PlastekNew extends msDeliveryHandler implements msDeliveryInterface
{
public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0)
{
$xxx = 300; // Типа что-то там себе посчитали... $xxx - стоимость доставки
$cart = $this->ms2->cart->status(); // Получили данные о содержимом корзины
$total_cost = $xxx + $cart['total_cost']; // Подсчитали Итого
return $total_cost; // Вернули Итого, и Итого отобразилось в форме оформления заказа - чанк tpl.msOrder
}
}
action.php передает {deliveryCost: -1, cost: 1449, period: 0, delivery: 7},где cost = 1149 (Стоимость всех товаров в корзине $cart['total_cost']) + 300 (стоимость доставки $xxx), delivery = 7 (id способа доставки в minishop2)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.