Кейс: создание кастомной корзины на 1С‑Битрикс с лицензией «Стандарт»
Лицензия «Стандарт» в 1С-Битрикс не включает стандартные модули интернет-магазина, такие как корзина, оформление заказа, оплата и доставка. В этой статье показано, как реализовать полноценную корзину и оформление заказов с помощью инфоблоков, кастомных компонентов и PHP.
1. Настройка инфоблоков
Создаем два инфоблока:
Каталог товаров
- Название (string)
- Артикул (string)
- Цена (price)
- Изображение (file)
- Описание (text)
Заказы
- Товары (JSON)
- Сумма (number)
- Клиент (string)
- Email (string)
- Телефон (string)
- Статус (string)
Использование JSON для списка товаров позволяет хранить количество и цену каждого продукта.
2. Кастомная корзина
Файл cart.php хранит товары в сессии и позволяет добавлять, удалять и выводить корзину:
<?php
session_start();
// Добавление товара
if($_POST['action'] == 'add') {
$id = $_POST['product_id'];
$qty = $_POST['quantity'] ?? 1;
$_SESSION['cart'][$id] = ($_SESSION['cart'][$id] ?? 0) + $qty;
echo json_encode(['status'=>'ok','cart'=>$_SESSION['cart']]);
exit;
}
// Удаление товара
if($_POST['action'] == 'remove') {
$id = $_POST['product_id'];
unset($_SESSION['cart'][$id]);
echo json_encode(['status'=>'ok','cart'=>$_SESSION['cart']]);
exit;
}
// Вывод корзины
$cart = $_SESSION['cart'] ?? [];
$total = 0;
foreach($cart as $id => $qty){
$res = CIBlockElement::GetByID($id)->GetNext();
$total += $res['PROPERTY_PRICE_VALUE'] * $qty;
}
echo json_encode(['cart'=>$cart,'total'=>$total]);
?>
3. Компонент оформления заказа
Файл order.php собирает информацию о клиенте, формирует заказ и сохраняет его в инфоблок:
<?php
session_start();
if($_POST){
global $USER;
CModule::IncludeModule("iblock");
$products = $_SESSION['cart'] ?? [];
if(empty($products)) die(json_encode(['status'=>'error','message'=>'Корзина пуста']));
$el = new CIBlockElement;
$PROP = [
"PRODUCTS" => json_encode($products),
"TOTAL" => $_POST['total'],
"CLIENT" => $_POST['name'],
"EMAIL" => $_POST['email'],
"PHONE" => $_POST['phone'],
"STATUS" => "Новый"
];
$arLoadProductArray = [
"MODIFIED_BY" => $USER->GetID(),
"IBLOCK_ID" => 5,
"NAME" => "Заказ ".date("d.m.Y H:i:s"),
"PROPERTY_VALUES" => $PROP,
"ACTIVE" => "Y"
];
if($ORDER_ID = $el->Add($arLoadProductArray)){
unset($_SESSION['cart']);
echo json_encode(['status'=>'ok','order_id'=>$ORDER_ID]);
} else {
echo json_encode(['status'=>'error','message'=>$el->LAST_ERROR]);
}
}
?>
4. Фронтенд корзины и оформление заказа
Простой интерфейс с AJAX позволяет добавлять товары и оформлять заказ:
<div id="cart"></div>
<button onclick="checkout()">Оформить заказ</button>
<script>
function loadCart(){
fetch('/local/components/custom/cart/cart.php')
.then(res => res.json())
.then(data => {
let html = '';
for(let id in data.cart){
html += `<div>Товар ${id} x ${data.cart[id]}</div>`;
}
html += `<div>Итого: ${data.total}</div>`;
document.getElementById('cart').innerHTML = html;
});
}
function checkout(){
const formData = new FormData();
formData.append('name','Иван Иванов');
formData.append('email','ivan@mail.ru');
formData.append('phone','+79991112233');
formData.append('total',1000);
fetch('/local/components/custom/order/order.php',{
method:'POST',
body: formData
})
.then(res => res.json())
.then(data => alert(JSON.stringify(data)));
}
loadCart();
</script>
5. Итоги
Даже с ограничениями лицензии «Стандарт» можно создать полноценную корзину и оформление заказов, используя инфоблоки, PHP и кастомные компоненты. Такое решение позволяет гибко управлять функционалом магазина и адаптировать его под любые требования.
Комментарии (0)
Оставить комментарий