Найти в Дзене
Kolesnev

Поле "Промокод" в форме Быстрого заказа в 1С Битрикс

От заказчика поступил вопрос: "Возможно ли в форме "Быстрый заказ" тоже вывести поле "Промокод" и чтобы клиенты могли вбивать его и скидка рассчитывалась?".

Ну что ж - вот и нашлась интересная задача.

Сайт работает на решении от Аспро, поэтому компонент используется их.

Для начала посмотрим на наши купоны:

На тестовой странице через API попробуем добавить скидку по купону на корзину.

if (CModule::IncludeModule("sale") && CModule::IncludeModule("catalog")) {
$coupon = 'SL-XU0Y5-HJ41R7T'; // номер нашего купона
$addCoupon = \Bitrix\Sale\DiscountCouponsManager::add($coupon);
if ($addCoupon) {
echo 'Купон применен';
} else {
echo 'Купон не применен';
}
}

Проверили - работает.

Посмотрим на код шаблона быстрого заказа (bitrix/templates/mtdd.ru-new/components/aspro/oneclickbuy.mshop/shop (у вас вероятнее всего другое название шаблона)).

В шаблон добавляем поле ввода купона и кнопку "Применить".

В нашем случае так:

<label class="coupon">Промокод</label></br>
<input id="one_click_buy_id_coupon" type="text" name="ONE_CLICK_BUY_coupon" value="" class="<?=$class;?>" style="width: 50%;"/>
<button class="button transparent big_btn long apply-button" style="float: right;">Применить</button>
</br>
<span class="answer"></span>
</br>

Добавляем js-скрипт :

<script> /* По нажатию на кнопку с классом apply-button будет делаться ajax-запрос вот сюда /include/oneclick_addcoupon.php */
$('.apply-button').click(function(){
var coupon = $('#one_click_buy_id_coupon').val();
$.ajax({
url: "/include/oneclick_addcoupon.php", // куда отправляем
type: "post", // метод передачи
dataType: "json", // тип передачи данных
data: {
"coupon": coupon
},
// после получения ответа сервера
success: function(data){
$('.answer').html('');
$('.answer').html(data.result); // выводим ответ сервера
}
});
})
</script>

Создаем файл /include/oneclick_addcoupon.php :

<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); // Обязательно подключаем, чтобы работали методы API Битрикс
if (CModule::IncludeModule("sale"))
{ //Если в корзине нет товаров, то и купон не применится, поэтому проверяем, есть ли товары в корзине
$arBasketItems = array();
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC","ID" => "ASC"),
array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"),
false,
false,
array("ID","MODULE","PRODUCT_ID","QUANTITY","CAN_BUY","PRICE"));
while ($arItems=$dbBasketItems->Fetch())
{
$arItems=CSaleBasket::GetByID($arItems["ID"]);
$arBasketItems[]=$arItems;
$cart_num+=$arItems['QUANTITY'];
}
}
$msg_box = "";
$errors = array(); // контейнер для ошибок
// проверяем корректность поля
if($_POST['coupon'] == ""){$errors[] = "Код купона не введен";};
if($cart_num<=1){$errors[] = "Добавьте товар в корзину";};
// если поле заполнено
if(empty($errors)){
if (CModule::IncludeModule("sale") && CModule::IncludeModule("catalog")) {
$coupon = $_POST['coupon']; // номер купона
$couponinfo = \Bitrix\Sale\DiscountCouponsManager::getData($coupon, true); // получаем информацио о купоне
if ($couponinfo['ACTIVE'] == "Y") {
$addCoupon = \Bitrix\Sale\DiscountCouponsManager::add($coupon); // true - купон есть / false - его нет
if ($addCoupon) {
$msg_box = "<span style='color: green;'>Купон Активирован</span><br/>";
} else {
$msg_box = "<span style='color: red;'>Купон уже активирован</span><br/>";
}
} else if (!$couponinfo['ACTIVE']) {
$msg_box = "<span style='color: red;'>Такого купона нет</span><br/>";
} else {
$msg_box = "<span style='color: red;'>Ошибка Активации купона</span><br/>";
}
}
}else{
// если были ошибки, то выводим их
$msg_box = "";
foreach($errors as $one_error){
$msg_box .= "<span style='color: red;'>$one_error</span><br/>";
}
}
// делаем ответ на клиентскую часть в формате JSON
echo json_encode(array(
'result' => $msg_box
));
?>

Ну вот и все.

У нас получилось так:

-2

Всем спасибо за внимание!

Что-то пошло не так, и нам не удалось загрузить комментарии. Попробуйте ещё раз
Рекомендуем почитать
Сбер закрыл GigaChat - свой аналог ChatGPT
Нас в комментариях и чатах неоднократно спрашивали – почему мы не делаем тестов и не сравниваем текстовые интерфейсы нейросетей Сбера (GigaChat) и Яндекса (Яндекс GPT). Отвечаем всегда просто – сравнивать надо сравнимое, а стоять в очереди за инвайтами как-то не про нас. Будет продукт – будем тестировать. А сегодня пришла благая весть от коллег: Сбер закрыл свой GigaChat. И мы понимаем почему. Во-первых, до сих пор неизвестно – это нейросеть или просто интерфейс к чужой нейросети. Мы не сторонники...
Сохраните отклики на архивные вакансии HeadHunter в Битрикс24: пошаговая инструкция
С 12 мая 2025 года HeadHunter начнет скрывать персональные данные соискателей в откликах у архивных вакансий. Доступ к ним закроется спустя 6 месяцев после архивации. Чтобы сохранить контакты кандидатов для своего кадрового резерва, настройте автоматическую выгрузку откликов в Битрикс24. В статье расскажем, как это сделать с помощью интеграции HeadHunter и Битрикс24. Теперь спустя 180 дней после архивации вакансии, доступ к персональным данным соискателей в откликах на нее станут недоступны для вас...
Битрикс24 как помощник в вопросах охраны труда (ЧАСТЬ 1).
Согласно законодательству, у каждого работодателя должен быть специально выделенный сотрудник, отвечающий за вопросы по охране труда. При его отсутствии (например, сейчас вы находитесь в процессе закрытия вакансии) ответственность за эти вопросы накладывается на директора. Основные сложности при организации охраны труда: С чем нам может помочь Битрикс24: Кратко законодательно опишем ключевые аспекты, на которые стоит обращать внимание (не перегружая дословным цитированием законов). Итак, предложение по реализации – создание отдельного цифрового рабочего места...
Следующая статья
Документы, вакансии и контакты