Меню
RSS
Минимальная сумма заказа в корзине 1С-Битрикс
 
Минимальная сумма заказа в корзине 1С-Битрикс

В этой заметке добавим возможность установки минимальной суммы заказа, в новом шаблоне корзины на 1С-Битрикс.
 
Михаил, спасибо вам за такой изящный способ, давно искал. Но вот только не могу заставить его работать. Всё ввёл как указано, несколько раз проверил, но в корзине ошибка:
Цитата
При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек .settings.php
Причём, начал понять, где именно, что не нравится... Первый пункт явно в порядке, в компоненте появилось поле с минимальной суммой, второй пункт нагляден и в точности его внёс в mutator.php
Код
   $minSummOrder = $this->arParams['MIN_SUMM'];
   if ($result['allSum'] < (int)$minSummOrder) {
       $minSummMustache = $minSummOrder;
   }
$totalData = array(
   'DISABLE_CHECKOUT' => (int)$result['ORDERABLE_BASKET_ITEMS_COUNT'] === 0,
   'PRICE' => $result['allSum'],
   'PRICE_FORMATED' => $result['allSum_FORMATED'],
   'PRICE_WITHOUT_DISCOUNT_FORMATED' => $result['PRICE_WITHOUT_DISCOUNT'],
   'CURRENCY' => $result['CURRENCY']
   'MIN_SUMM' => $minSummMustache
В basket-total.php вышло так:
Код
            <div class="basket-checkout-block basket-checkout-block-btn">
               <button class="btn btn-lg btn-default basket-btn-checkout{{#DISABLE_CHECKOUT}} disabled{{/DISABLE_CHECKOUT}}"
               {{#MIN_SUMM}}
    <div class="minimal_summ">
        Минимальная сумма заказа {{{MIN_SUMM}}} руб.
    </div>
{{/MIN_SUMM}}
{{^MIN_SUMM}}
                  data-entity="basket-checkout-button">
                  <?=Loc::getMessage('SBB_ORDER')?>
               </button>
               {{/MIN_SUMM}}
            </div>
         </div>
      </div>

Но ошибка. Причем, если удалить строку второго действия (что конечно не правильно)
Код
   'MIN_SUMM' => $minSummMustache
То задача по получению "минимальной суммы" хоть и не работает, но корзина работает как и до всех изменений. Подскажите пожалуйста, что я делаю не так, очень хочется реализовать данный вариант. Спасибо
 
Запятую забыли тут
Код
'CURRENCY' => $result['CURRENCY'],  //<<<<<<- нет запятой 
'MIN_SUMM' => $minSummMustache,  // - тоже можно поставить (не обязательно)
Изменено: Михаил Базаров - 09.04.2025 08:24:04
 
Михаил! Низкий поклон! Теперь всё в полном порядке. Очень удобное решение. Спасибо!
 
Приветствую, а следующая заметка с указанием минимальной суммы для разных групп покупателей еще не готова?
 
Пока нет, пишется )
Изменено: Михаил Базаров - 09.04.2025 08:23:55
 
Здравствуйте!

Скажите, а возможно сделать ограничении минимальной суммы корзины, но чтобы при применении купона (в рублях), минимальная сумма отключалась? Сейчас получается так, что человек набирает корзину на 5500 рублей, применяет купон на 5000 рублей, и ему нужно набрать еще товара, до получения минимальной суммы заказа. Подскажите, пожалуйста, куда копать или имеются готовые решения?

Заранее спасибо!
 
Здравствуйте!
Подскажите в mutator.php все нормально. В basket-total.php заменил, но в корзине ничего не меняется.. в чем может быть проблема? кеш сбросил
 
Может быть не в том шаблоне корзины делаете?
Это из более менее простого  :)

А так, сложно подсказать - нужно разбираться на месте
Изменено: Михаил Базаров - 09.04.2025 08:23:46
 
а с оформлением заказа как быть? /personal/order/make/
 
В принципе, точно так же. Проверять сумму товаров заказа и скрывать / показывать кнопку оформления заказа.
 
Изменено: Михаил Базаров - 09.04.2025 08:23:38
 
Здравствуйте, после добавления
if ($arParams['MIN_SUMM'] < $arResult['JS_DATA']['TOTAL']['PRICE_WITHOUT_DISCOUNT_VALUE']) {
   header('Location:'.$arParams['PATH_TO_BASKET']);
}

в sale.order.ajax и нажатия на кнопку "Оформить заказ" идет переброска на страницу с корзиной, которая пустая, хотя по по плану должна была быть страница с инф. о заказе и оплатой...

В чем может быть причина такой ошибки?
 
Да, что-то этот момент я не учел. После оформления, само собой сумма станет меньше минимальной (точнее 0) и условие сработает.
Быстрое решение, перенесите эту проверку из result_modifier.php в вверх template.php
Тогда не должно бы срабатывать после оформления заказа, за него отвечает файл confirm.php

Позже дополню заметку более "фен шуйным" вариантом.
Изменено: Михаил Базаров - 09.04.2025 08:23:31
 
А я в  template.php (sale.order.ajax) и добавляла проверку и был переброс на корзину...
 
Обверните код, который проверяет сумму в корзине и отвечает за редирект, вот в такое условие:
Код
if (!$request->get('ORDER_ID') <> '') {
    if ($arParams['MIN_SUMM'] > $arResult['JS_DATA']['TOTAL']['PRICE_WITHOUT_DISCOUNT_VALUE']) {
        LocalRedirect($arParams['PATH_TO_BASKET']);
    }
}

В заметку дописал этот нюансик
Изменено: Михаил Базаров - 09.04.2025 08:23:23
 
Обернула код в template.php (sale.order.ajax) новым условием, которое вы прислали в пред.комментарии и вышло много ошибок (см. прил.), а сама форма заказа пропала.
 
Все работает, проверил со штатными шаблонами вот тут https://bxstore.ru/ (минимальная сумма 100 000 руб)

В интек шаблоне видимо есть какая-то модификация. Попробуйте найти там подключение файла confirm.php и перешлите сюда.

В штатном шаблоне выглядет так, ищите что-то похожее.
Код
if ($request->get('ORDER_ID') <> '')
{
   include(Main\Application::getDocumentRoot().$templateFolder.'/confirm.php');
}

Собственно, он в это же условие обвернут, но без отрицания.
Изменено: Михаил Базаров - 07.05.2023 09:30:48
 
А какой может быть способ решения схожей задачи, в которой нужен контроль минимальной стоимости (сбора) в разрезе каждой номенклатуры? Другими словами, отдельного товара можно купить на общую сумму не менее чем ХХХ руб. при этом в заказе (в корзине) могут быть подобраны разные товары, и по каждому из них установлена установлена индивидуальная "отсечка" минимального стоимости (сбора)!
 
Такое через свойства товара, думаю, проще всего. У товаров свойство типа число "Минимальная сумма".
В корзине получать свойство каждого товара, сравнивать с суммой этого товара в корзине и выводить оповещение.

Можно скомпоновать с этой заметкой:
https://bazarow.ru/blog-note/13200/
Если сумма не достаточна при переходе к заказу удалять такие товары (предупредив пользователя)
Изменено: Михаил Базаров - 09.04.2025 08:23:13
 
Добрый день Михаил.
А как можно сделать чтобы минимальная стоимость заказа была только у определённого типа плательщиков?
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

Отключить поиск по описаниям товаров в Битрикс

Иногда, нужно отключить поиск по описаниям анонсов и детальному описанию товаров, при разработке сайтов на Битрикс. Сдел...

Получить и вывести все цены товара в 1С-Битрикс

Задача: получить и вывести все цены товара по его ID в каталоге 1С-Битрикс (например, в детальной карточке catalog.e...

Отфильтровать элементы в Битрикс по свойству привязка к разделам

При создании достаточно сложных интернет-магазинов на Битрикс, иногда встает задача помимо обычной навигации каталогу со...

Глобальные фильтры на всякие случаи жизни

Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива, инфорблока. Спектр применяем...

Установка счетчика Яндекс.Метрики на сайт с Content Security Policy (CSP)

Если на вашем сайте не отображаются данные о кликах и скроллинге в Яндекс.Метрике, вероятнее всего, это связано с настро...

Повторить заказ на API 1С-Битрикс наполнив корзину из заказа

Задача: заполнить корзину пользователя теми же товарами и количествами которые были в ранее созданном заказе. При этом н...

Создание раздела инфоблока при регистрации пользователя в Битрикс

Например вам нужно выводить информацию исключительно для определенного пользователя. Само собой, это можно сделать с пом...

Мобильные версии страниц и поисковые системы

Согласно требования поисковых систем: Яндекс и Google, в случае если у вашего сайта имеется мобильная версия, нужно увед...

Прямое открытие мессенджеров по ссылке из приложения Apache Cordova

Задача: При клике по ссылкам на Telegram и WhatsApp в мобильном приложении необходимо сразу открывать мессенджеры без пр...