Телеграм: @camouf_ru Почта: mihail@bazarow.ru

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

Просмотров: 8483

В этой заметке добавим возможность установки минимальной суммы заказа, в новом шаблоне корзины на 1С-Битрикс.

В этой заметке добавим возможность установки минимальной суммы заказа, в новом шаблоне корзины на 1С-Битрикс. Не "прибитую гвоздями" в шаблоне компонента, а управляемую через параметры компонента.

Работать будет так: Если сумма в корзине меньше минимальной - то кнопка "Оформить заказ" не показывается, вместо нее уведомление. Как только сумма превышает минимальную - кнопка появляется. Все работает на лету, без перезагрузки страницы. Как-то так:

Минимальная сумма битрикс

Добавляем параметр в корзину

Для начала скопируем шаблон корзины в шаблон своего сайта. В моем случае получился путь: /local/templates/ШАБЛОН_САЙТА/components/bitrix/sale.basket.basket/basket

Открываем, в шаблоне, файл .parameters.php и в массив параметров arTemplateParameters добавляем:

$arTemplateParameters['MIN_SUMM'] = array(
    'PARENT' => 'BASE',
    'NAME' => "Минимальная сумма",
    'TYPE' => 'STRING',
    'DEFAULT' => '0'
);

PS: в 'NAME' можно добавить и прописать сообщение из lang файла GetMessage('MIN_SUMM'), прописал прямо в файл для простоты объяснения.

После этого, в настройках компонента появится поле для указания минимальной суммы:

Минимальная сумма битрикс

Добавляем параметр в AJAX обработчик

Теперь, нужно добавить вывод этого параметра в шаблон. Для этого открываем файл (в шаблоне корзины) mutator.php. В этом файле собран массив с данными для вывода в представление. Обращение к этому файлу происходит при каждом запросе и массив отрабатывает на лету (AJAX). Файл фомирует результат для шаблонизатора mustashe

Находим формирование массива $totalData - примерно на 310-ой строчке. Нужно добавить:

//До формирования массива
  $minSummOrder = $this->arParams['MIN_SUMM'];
  if ($result['allSum'] < (int)$minSummOrder) {
      $minSummMustache = $minSummOrder;
  }

//В конец массива ключ MIN_SUMM
  'MIN_SUMM' => $minSummMustache

Для наглядности картинка: здесь мы проверили меньше ли сумма товаров, минимальной суммы и создали переменную для добавления в массив ключа 'MIN_SUMM'

Минимальная сумма битрикс

На картинке опечатка: не правильно оформлен int - в примере кода все правильно

Выводим параметр пользователям

И осталось вывести и обработать этот параметр для пользователей. Открываем файл шаблон_корзины/js-templates/basket-total.php он отвечает за формирование и вывод низа корзины: где поле купона, итоговая сумма и кнопка перехода к оформлению.

Находим строчку, в которой прописана кнопка перехода к оформлению (примерно, строка 75) и заворачиваем в условие.

{{#MIN_SUMM}}
    <div class="minimal_summ">
        Минимальная сумма заказа {{{MIN_SUMM}}} руб.
    </div>
{{/MIN_SUMM}}
{{^MIN_SUMM}}
  <button data-entity="basket-checkout-button">
    <?=Loc::getMessage('SBB_ORDER')?>
  </button>
{{/MIN_SUMM}}

Здесь мы проверили: если из файла mutator.php пришло значение для MIN_SUMM убираем кнопку перехода к оформлению, но выводим оповещение.

Минимальная сумма в оформлении заказа

Особо хитрые пользователи могут проигнорировать этот функционал и просто перейти на страницу оформления (если знают ссылку). Что бы обезопасить и оформление заказа, можно также проверять минимальную сумму и перенаправлять в корзину.

Как реализовать, смотрите в видео.

Александр Козлов 17.07.2020
Михаил, спасибо вам за такой изящный способ, давно искал. Но вот только не могу заставить его работать. Всё ввёл как указано, несколько раз проверил, но в корзине ошибка:
Цитата
При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек .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
То задача по получению "минимальной суммы" хоть и не работает, но корзина работает как и до всех изменений. Подскажите пожалуйста, что я делаю не так, очень хочется реализовать данный вариант. Спасибо
Михаил Базаров 18.07.2020
Цитата
Александр Козлов пишет:
[QUOTE][URL=/club/user/1/]Михаил Базаров[/URL] пишет:
Включите вывод ошибок в .settings.php[/QUOTE] Вот, что не нравится: [CODE] [ParseError]
syntax error, unexpected ''MIN_SUMM'' (T_CONSTANT_ENCAPSED_STRING), expecting ')' (0)

Запятую забыли тут
Код
'CURRENCY' => $result['CURRENCY'],  //<<<<<<- нет запятой 
'MIN_SUMM' => $minSummMustache,  // - тоже можно поставить (не обязательно)
Александр Козлов 19.07.2020
Михаил! Низкий поклон! Теперь всё в полном порядке. Очень удобное решение. Спасибо!
Roland 303 06.08.2020
Приветствую, а следующая заметка с указанием минимальной суммы для разных групп покупателей еще не готова?
Михаил Базаров 09.08.2020
Цитата
Roland 303 написал:
Приветствую, а следующая заметка с указанием минимальной суммы для разных групп покупателей еще не готова?
Пока нет, пишется )
Павел Рубцов 26.08.2020
Здравствуйте!

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

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

А так, сложно подсказать - нужно разбираться на месте
Александр 13.08.2021
а с оформлением заказа как быть? /personal/order/make/
Михаил Базаров 13.08.2021
Цитата
Александр написал:
а с оформлением заказа как быть? /personal/order/make/
В принципе, точно так же. Проверять сумму товаров заказа и скрывать / показывать кнопку оформления заказа.

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Вывести свойство отдельно ото всех или исключить из всех Просмотров: 7019 Иногда, на сайте, под управлением 1С-Битрикс, нужно вывести какое-то конкретное свойство о... Не дать пользователю купить больше одного товара, в Битрикс Просмотров: 5148 Иногда нужно и такое: Например: на одном из разрабатываемых сайтов, мне нужно было создать... Отключить поиск по описаниям товаров в Битрикс Просмотров: 10621 Иногда, нужно отключить поиск по описаниям анонсов и детальному описанию товаров, при разр... Сортировка элементов по индексу сортировки значений типа список Просмотров: 10545 Внутри любого компонента есть заранее заложенные поля для сортировки элементов. МОжно сорт... Вывод элементов с помощью API битрикс Просмотров: 22422 Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Нап... Установить цену товара из свойства инфоблока Просмотров: 8713 На одном из проектов, нужно было единоразово заполнить цены товаров из свойства инфоблока... Создание PWA для сайта на 1С-Битрикс Просмотров: 2100 Технология PWA позволяет создать приложение для любого сайта. Не обязательно работающего ... Вывести дату окончания скидки в карточке товара Просмотров: 3651 Если нужно вывести информацию о скидке в карточке товара, можно воспользоваться методом AJAX корзина с отправкой количества из раздела каталога Просмотров: 19124 Столкнулся с задачкой: нужно было на одном сайте реализовать интерактивный прайс лист. При... Помечаем новинки лейблом в каталоге битрикс Просмотров: 20036 Достаточно часто, при разработке каталога товаров или интернет магазина на системе управле... Самодельная форма добавления элемента на API Битрикс Просмотров: 42558 Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изр... Умный фильтр во всплывающей панели на мобильных. Просмотров: 1447 Шаблон умного фильтра в Битриксе достаточно сложный, с точки зрения верстки и не очень кра... Валидация пароля и подтверждения при регистрации в битрикс Просмотров: 14264 Встала задачка сделать валидацию пароля и его подтверждения в стандартной форме регистраци... Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 17697 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... Подключение мобильной версии шаблона Битрикс сайта, с автопереключени... Просмотров: 42288 Предпочитаю, что бы сайт не грузил кучу скриптов и стилей. При загрузке адаптивного шаблон... Правильное подключение стилей и скриптов в Битрикс Просмотров: 80649 Есть несколько способов подключения файлов стилей и скриптов, при верстке шаблонов в систе... Заполнить картинки разделов каталога из картинок товаров Просмотров: 337 Задача: в каталоге, разделы и подразделы выводятся в виде плитки над товарами, с картинкам... Дать пользователю возможность быстро отредактировать материал Просмотров: 4364 На одном из разрабатываемых сайтов, пользователи формирую его контент. После регистрации, ... Cordova, ввод в input под диктовку. Голосовой поиск в мобильном прило... Просмотров: 1263 Итак, задачка: реализовать голосовой поиск в мобильном приложении на Cordova. По сути, нам... Базовая защита "Битрикс виртуальная машина" от DDoS атак. Просмотров: 5262 Данный способ защиты не панацея, и скорее всего не спасет от профессиональной DDoS атаки, ...