В этой заметке добавим возможность установки минимальной суммы заказа, в новом шаблоне корзины на 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 убираем кнопку перехода к оформлению, но выводим оповещение.
Минимальная сумма в оформлении заказа
Особо хитрые пользователи могут проигнорировать этот функционал и просто перейти на страницу оформления (если знают ссылку). Что бы обезопасить и оформление заказа, можно также проверять минимальную сумму и перенаправлять в корзину.
Как реализовать, смотрите в видео.
В видео не учел важный момент. После оформления заказа не покажется результат из файла confirm.php, так как сумма заказа станет 0 - и сработает условие с редиректом. Что бы этого избежать, нужно обвернуть условие проверки и редирект в условие:
if (!$request->get('ORDER_ID') <> '') {
if ($arParams['MIN_SUMM'] > $arResult['JS_DATA']['TOTAL']['PRICE_WITHOUT_DISCOUNT_VALUE']) {
LocalRedirect($arParams['PATH_TO_BASKET']);
}
}