Изменение стоимости доставки в default.js
Привет ребята!
Столкнулся с небольшой проблемой, думаю многие уже с ней сталкивались, но в поиске ничего стоящего не нашел.
Задача стояла в том, чтобы сделать бесплатную доставку при заказе от 10 т.р. в пределах МКАД и от 15 т.р. за пределы мкад.
Назначил свои кастомные классы для каждого способа доставки, все считает прекрасно в [[+order_cost]]. Но вот не пойму как сделать чтобы вместо [[+price]] (цены доставки) подставлялось налету 0 руб. чтобы сказать клиенту что доставка теперь бесплатна?
Нашел этот коммент Василия, но так и не понял где что поправить.
Столкнулся с небольшой проблемой, думаю многие уже с ней сталкивались, но в поиске ничего стоящего не нашел.
Задача стояла в том, чтобы сделать бесплатную доставку при заказе от 10 т.р. в пределах МКАД и от 15 т.р. за пределы мкад.
Назначил свои кастомные классы для каждого способа доставки, все считает прекрасно в [[+order_cost]]. Но вот не пойму как сделать чтобы вместо [[+price]] (цены доставки) подставлялось налету 0 руб. чтобы сказать клиенту что доставка теперь бесплатна?
Нашел этот коммент Василия, но так и не понял где что поправить.
Комментарии: 20
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
1. Нужно создать класс-наследника msDeliveryInterface
2. Положить в /core/components/minishop2/custom/delivery/имякласса.class.php
3. Указать имя класса (не файла) в методе доставки, в админке.
Вот нашел рабочий код для кастомного класса:
В коде выше мы написали что у нас стоимость доставки при сумме заказа больше 10 т.р. = 0.
4. Дальше создаем свой класс заказа и прописываем имя в настройках минишопа, кладем его сюда
core/components/minishop2/custom/order/Имя класса.class.php
Содиржимое:
В коде вместо Имя класса, указываем свой.
5. Далее в чанке со строками вывода цены доставки (в нашем случае tpl.msOrder.delivery), оборачиваем плейсхолдер в
Вот и все, должно работать.
Как только все подключаю страница с доставкой и способами оплаты просто перестает грузиться… Видимо в приведенных примерах ошибка где-то в php
/public_html/core/components/minishop2/custom/order/msDeliveryHandler_free10.class.php
/public_html/core/components/minishop2/custom/delivery/msDeliveryHandler_free10.class.php
Прописал следующий код:
и
В самой доставке которая будет обрабатываться задал класс: prnt.sc/ah8b2y msDeliveryHandler_free10
В настройках Minishop заменил переопределеный обработчик: prnt.sc/ah8bsl mynewOrderHandler
В чанке tpl.msOrder.delivery прописал обертку цены ____________________________
Но сумма как была 0 в доставке так и осталась, но общая сумма меняется, что сделал не таки как сделать чтобы возле доставки стоимость отображалась ????
Спасибо prnt.sc/ah8dix
modx.pro/development/8817-do-colbecki-minishop2-for-all/
Но не ищите там решение, его нужно понять самостоятельно.
поле улица заполняется autocomplete, например улица «Аносова улица» добавляет 100 руб к цене, а «23 км казарма» 300 рублей, наценка происходит после обновления страницы
Что необходимо сделать, чтобы добавить бесплатную доставку, при заказе от 300$?
Сейчас файл класса имеет следующий вид:
<?php
require_once MODX_CORE_PATH. 'components/minishop2/model/minishop2/msdeliveryhandler.class.php';
class TtsSimpleDelivery extends msDeliveryHandler
{
public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0)
{
$this->modx->addPackage('tts', $this->modx->getOption('tts.core_path', null, $this->modx->getOption('core_path'). 'components/tts/'). 'model/');
$order = $this->ms2->order->get();
$country = $this->modx->getObject('TtsCountry', array(
'id' => (int)$this->modx->getOption('country', $order),
));
if (!$country) {
if ($this->modx->getPlaceholder('throw_ms2_exceptions')) {
throw new Exception();
}
return $cost;
}
$regionId = (int)$this->modx->getOption('region', $order);
$region = null;
$count = $this->modx->getCount('TtsCountryRegion', array(
'country_id' => $country->get('id'),
));
if ($count) {
$region = $this->modx->getObject('TtsCountryRegion', array(
'id' => $regionId,
'country_id' => $country->get('id'),
));
if (!$region) {
if ($this->modx->getPlaceholder('throw_ms2_exceptions')) {
throw new Exception();
}
return $cost;
}
}
mb_internal_encoding('UTF-8');
$city = mb_strtolower(trim($this->modx->getOption('city', $order)));
$moscow = array(
'москва',
'moscow',
);
$kiev = array(
'киев',
'kiev',
);
/*if (!$payment || ($payment->id == 1 && $country->id == 177 && !in_array($city, $moscow))) {
return Redirect::route('cart.step2');
}*/
if ($delivery->get('name') == 'tts.delivery.free') {
if (!in_array($country->get('id'), array(177, 223)) || ($country->get('id') == 177 && !in_array($city, $moscow)) || ($country->get('id') == 223 && !in_array($city, $kiev))) {
if ($this->modx->getPlaceholder('throw_ms2_exceptions')) {
throw new Exception();
}
}
return $cost;
}
$zone = $this->modx->getObject('TtsDeliveryZone', array(
'id' => (int)$this->modx->getOption('delivery_zone', $order),
'delivery_id' => $delivery->get('id'),
));
if (!$zone) {
if ($this->modx->getPlaceholder('throw_ms2_exceptions')) {
throw new Exception();
}
return $cost;
}
$fee = floatval($zone->fee);
if ($delivery->get('name') == 'tts.delivery.dhl') {
$cart = $this->ms2->cart->status();
$fee *= $cart['total_count'];
}
return $cost + $fee;
}
}
Код: 500 Internal Server Error, помогите как решить
Всё сделал по инструкции, пробовал разные варианты, но всё равно выдаёт 500 ошибку, а класс-обработчик прописать не даёт…