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

Минимальная сумма заказа в корзине и оформлении заказа в 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 убираем кнопку перехода к оформлению, но выводим оповещение.

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

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

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

Просмотров: 5319 | Комментариев: 9

Комментарии

Внимание! все сообщения проходят премодерацию. Ваше сообщение появится после проверки
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Загрузить файл
Нажимая кнопку "Отправить", Вы принимаете условия
Политики конфиденциальности и обработки персональных данных
Александр Козлов
Михаил, спасибо вам за такой изящный способ, давно искал. Но вот только не могу заставить его работать. Всё ввёл как указано, несколько раз проверил, но в корзине ошибка:
Цитата
При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек .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
То задача по получению "минимальной суммы" хоть и не работает, но корзина работает как и до всех изменений. Подскажите пожалуйста, что я делаю не так, очень хочется реализовать данный вариант. Спасибо
Имя Цитировать
Михаил Базаров
Цитата
Александр Козлов пишет:
[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,  // - тоже можно поставить (не обязательно)
Имя Цитировать
Александр Козлов
Михаил! Низкий поклон! Теперь всё в полном порядке. Очень удобное решение. Спасибо!
Имя Цитировать
Roland 303
Приветствую, а следующая заметка с указанием минимальной суммы для разных групп покупателей еще не готова?
Имя Цитировать
Михаил Базаров
Цитата
Roland 303 написал:
Приветствую, а следующая заметка с указанием минимальной суммы для разных групп покупателей еще не готова?
Пока нет, пишется )
Имя Цитировать
Павел Рубцов
Здравствуйте!

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

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

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

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

Заказaть разработку attention