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

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

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

В этой заметке добавим возможность установки минимальной суммы заказа, в новом шаблоне корзины на 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-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне ... Просмотров: 1769 Ранее я уже делал заметку на эту тему. Тогда, мы меняли значение input-а при добавлении то... Фотогалерея на базе компонента новостей, с fancybox. Просмотров: 2906 Это заметка обновление к очень старой, уже имеющейся на сайте. Сделаем что-то типа фотогал... Быстрая отписка от всех рассылок модуля "E-mail маркетинг", в кабинет... Просмотров: 277 Задача: дать пользователям возможность отписаться от всех рассылок "E-mail маркетинга", не... Если предложение SKU в корзине, поменять кнопку добавления на "В корз... Просмотров: 3881 Данная заметка является дополнением к ранее опубликованной: Есл... Цвета торговых предложений из Highload инфоблоков в списке товаров Просмотров: 14905 Подвернулся на доработку очень старый сайт, работал еще на 11-ой версии Битрикс. Выполнили... Автогенерация символьных кодов разделов и элементов Битрикс Просмотров: 16130 Иногда нужно создать символьные коды для разделов и элементов. Например: если сайт создан ... Ajax форма обратной связи, реализация в битрикс Просмотров: 8680 Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в... Пункты меню из разделов инфоблока Битрикс Просмотров: 93234 В принципе это стандартная возможность системы управления битрикс, но почему-то часто спра... Вывод элементов с помощью API битрикс Просмотров: 23961 Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Нап... Установка веб-сервера LAMP на ubuntu 20.04 LTS, оптимизированный под ... Просмотров: 12750 В последнее время, плотно пересел c macOS на ubuntu, и решил настроить себе полноценное ра... Дополнительные картинки в новостях Битрикс, почти фотогалерея. Просмотров: 49498 Частенько стоит задача, по мимо стандартных "Картинка для анонса" и "Деталь... Настройка обмена между 1С:Предприятие и магазином на "1С-Битрикс24: И... Просмотров: 3430 В этой заметке расскажу как настроить синхронизацию между 1С:предприятие и "1С-Битрикс24: ... Как работает система сертификации партнеров 1С-Битрикс, уровни партне... Просмотров: 4471 Сертификация от «1С-Битрикс» – это объективная оценка знаний и практических навыков разраб... Если товар в корзине, поменять значение input на "В корзине" Просмотров: 11092 Если Вам нужно поменять текст на кнопке, добавляющей товар в корзину, достаточно воспользо... Вывести компонент новостей на страницу в Битрикс Просмотров: 65106 Посмотрел Яндекс метрику на свой сайт, и решил что буду частенько писать сюда именно то, ч... Заполнить картинки разделов каталога из картинок товаров Просмотров: 943 Задача: в каталоге, разделы и подразделы выводятся в виде плитки над товарами, с картинкам... Fancybox в стандартном шаблоне детальной карточки товара, вместо вспл... Просмотров: 104 Задача: заменить работу с изображениями в стандартном или кастомном шаблоне детальной карт... Удалить товары из корзины, если есть определенные товары. Просмотров: 1914 Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины... Получить все товары из всех заказов пользователя. История купленных т... Просмотров: 2216 Задача: нужно создать раздел, в персональном разделе пользователя, с историей всех купленн... Отключить поиск по описаниям товаров в Битрикс Просмотров: 11844 Иногда, нужно отключить поиск по описаниям анонсов и детальному описанию товаров, при разр...