В этой заметке добавим возможность установки минимальной суммы заказа, в новом шаблоне корзины на 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 убираем кнопку перехода к оформлению, но выводим оповещение.
Минимальная сумма в оформлении заказа
Особо хитрые пользователи могут проигнорировать этот функционал и просто перейти на страницу оформления (если знают ссылку). Что бы обезопасить и оформление заказа, можно также проверять минимальную сумму и перенаправлять в корзину.
Как реализовать, смотрите в видео.
Поддержать выпуски видео уроков, поблагодарить за полезную инструкцию или заметку можно через:
Юманей
Цитата |
---|
При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек .settings.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 |
Код |
---|
<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 написал: Приветствую, а следующая заметка с указанием минимальной суммы для разных групп покупателей еще не готова? |
Скажите, а возможно сделать ограничении минимальной суммы корзины, но чтобы при применении купона (в рублях), минимальная сумма отключалась? Сейчас получается так, что человек набирает корзину на 5500 рублей, применяет купон на 5000 рублей, и ему нужно набрать еще товара, до получения минимальной суммы заказа. Подскажите, пожалуйста, куда копать или имеются готовые решения?
Заранее спасибо!
Подскажите в mutator.php все нормально. В basket-total.php заменил, но в корзине ничего не меняется.. в чем может быть проблема? кеш сбросил

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

Цитата |
---|
Александр написал: а с оформлением заказа как быть? /personal/order/make/ |