Ajax поле промо-код на любой странице Битрикс с помощью D7
Последние записи
Иногда от нас требуется организовать поле промо-код (ввод купона) в произвольном месте или добавить результат обработки промо-кода во всплывающей форме. В этих случаях нам требуется динамически отправлять запрос и в зависимости от результата производить действие на странице. Я расскажу как организовать данное взаимодействие
На тестовой странице добавляем поле ввода купона и кнопку "Применить".
<label class="coupon">Промокод</label></br>
<input id="basket-coupon" type="text" name="ONE_CLICK_BUY_coupon" value="" />
<button class="basket-coupon-block-coupon-btn">Применить</button>
</br>
<span class="answer"></span>
Добавляем js-скрипт :
$('body').on('click','.basket-coupon-block-coupon-btn',function(e){
e.preventDefault();
e.stopPropagation();
var coupon = $('#basket-coupon').val();
$.ajax({
url: "/include/libs/addcoupon.php", // куда отправляем
type: "post", // метод передачи
dataType: "json", // тип передачи данных
data: {
"coupon": coupon
},
success: function(data){
$('.popupCoupon h2').html(data.title);
$('.popupCoupon .subtitle').html(data.result);
formLoad('popupCoupon');
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
console.log("Status: " + textStatus); alert("Error: " + errorThrown);
}
});
});
Создаем файл /include/oneclick_addcoupon.php
:
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
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 = $msg_title = "";
$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 = "Промо-код активирован";
$msg_title = "Промо-код успешно активирован";
} else {
$msg_box = "Промо-код уже активирован";
$msg_title = "Некорректный промо-код";
}
} else if (!$couponinfo['ACTIVE']) {
$msg_box = "Такого промо-кода нет";
$msg_title = "Некорректный промо-код";
} else {
$msg_box = "Ошибка активации промо-кода";
$msg_title = "Некорректный промо-код";
}
}
}else{
// если были ошибки, то выводим их
$msg_box = "";
foreach($errors as $one_error){
$msg_box .= "$one_error";
}
$msg_title = "Некорректный промо-код";
}
// делаем ответ на клиентскую часть в формате JSON
echo json_encode(array(
'result' => $msg_box,
'title' => $msg_title
));
По мотивам материала:
Комментарии