Посібник розробника
Цей посібник охоплює розширену конфігурацію, налаштування та розробку з sCommerce.
Огляд архітектури
sCommerce слідує модульній архітектурі з чітким розділенням відповідальності:
sCommerce/
├── src/
│ ├── Models/ # Eloquent моделі
│ ├── Controllers/ # HTTP контролери
│ ├── Services/ # Бізнес-логіка
│ ├── Facades/ # Фасади сервісів
│ ├── Http/ # Маршрути та middleware
│ └── Integration/ # Зовнішні інтеграції
├── views/ # Blade шаблони
├── assets/ # CSS, JS, зображення
└── database/ # Міграції та сідери
Моделі
Модель sProduct
Основна модель товару з відносинами та атрибутами:
use Seiger\sCommerce\Models\sProduct;
// Створення товару
$product = sProduct::create([
'name' => 'Назва товару',
'alias' => 'nazva-tovaru',
'price_regular' => 999.99,
'category' => 1,
'published' => 1
]);
// Відносини
$product->category; // BelongsTo sCategory
$product->images; // HasMany sProductImage
$product->attributes; // HasMany sProductAttribute
$product->translates; // HasMany sProductTranslate
$product->reviews; // HasMany sProductReview
// Scope запити
sProduct::published(); // Тільки опубліковані товари
sProduct::inStock(); // Тільки товари в наявності
sProduct::byCategory(1); // Товари певної категорії
// Атрибути
$product->link; // URL товару
$product->reviewsCount; // Кількість відгуків
$product->averageRating; // Середній рейтинг
Модель sCategory
Управління категоріями з ієрархічною структурою:
use Seiger\sCommerce\Models\sCategory;
// Створення категорії
$category = sCategory::create([
'pagetitle' => 'Електроніка',
'alias' => 'elektronika',
'parent' => 0,
'published' => 1
]);
// Відносини
$category->children; // HasMany sCategory (підкатегорії)
$category->parent; // BelongsTo sCategory
$category->products; // HasMany sProduct
Модель sOrder
Управління та обробка замовлень:
use Seiger\sCommerce\Models\sOrder;
// Створення замовлення
$order = sOrder::create([
'customer_id' => 1,
'status' => 'pending',
'total' => 1999.98,
'currency' => 'UAH'
]);
Сервіси
Сервіс sCommerce
Основний сервісний клас для операцій електронної комерції:
use Seiger\sCommerce\Facades\sCommerce;
// Операції з товарами
$products = sCommerce::getProducts($filters);
$product = sCommerce::getProduct($id);
// Операції з категоріями
$categories = sCommerce::getCategories();
$category = sCommerce::getCategory($id);
// Операції з кошиком
sCommerce::addToCart($productId, $quantity);
sCommerce::removeFromCart($itemId);
$cart = sCommerce::getCart();
// Операції із замовленнями
$order = sCommerce::createOrder($data);
Розробка API
REST API ендпоінти
sCommerce надає комплексний REST API:
// API товарів
GET /api/products # Список товарів
GET /api/products/{id} # Деталі товару
POST /api/products # Створення товару
PUT /api/products/{id} # Оновлення товару
DELETE /api/products/{id} # Видалення товару
// API категорій
GET /api/categories # Список категорій
GET /api/categories/{id} # Деталі категорії
// API кошика
GET /api/cart # Отримати кошик
POST /api/cart/items # Додати товар
DELETE /api/cart/items/{id} # Видалити товар
// API замовлень
GET /api/orders # Список замовлень
POST /api/orders # Створити замовлення
Користувацькі інтеграції
Інтеграція платіжних шлюзів
Створення власного платіжного шлюзу:
<?php namespace App\Payments;
use Seiger\sCommerce\Contracts\PaymentGatewayInterface;
class CustomPaymentGateway implements PaymentGatewayInterface
{
public function processPayment(array $data): array
{
// Логіка обробки платежу
$result = $this->callPaymentAPI($data);
return [
'success' => $result['status'] === 'success',
'transaction_id' => $result['transaction_id'],
'message' => $result['message']
];
}
}
Інтеграція провайдерів доставки
Створення власного провайдера доставки:
<?php namespace App\Shipping;
use Seiger\sCommerce\Contracts\ShippingProviderInterface;
class CustomShippingProvider implements ShippingProviderInterface
{
public function calculateShipping(array $data): array
{
// Розрахунок вартості доставки
$cost = $this->calculateCost($data);
return [
'success' => true,
'cost' => $cost,
'delivery_time' => '3-5 робочих днів'
];
}
}
Система подій
sCommerce надає систему подій для розширення функціональності:
use Seiger\sCommerce\Events\ProductCreated;
use Seiger\sCommerce\Events\OrderCreated;
// Прослуховування подій
Event::listen(ProductCreated::class, function ($event) {
// Надіслати сповіщення
// Оновити індекс пошуку
});
Event::listen(OrderCreated::class, function ($event) {
// Надіслати email підтвердження
// Оновити інвентар
});
Оптимізація продуктивності
Оптимізація бази даних
// Використовуйте eager loading для уникнення N+1 запитів
$products = sProduct::with(['category', 'images', 'attributes'])
->published()
->get();
// Використовуйте індекси бази даних
Schema::table('s_products', function (Blueprint $table) {
$table->index(['published', 'category']);
$table->index('alias');
});
Кешування
use Illuminate\Support\Facades\Cache;
// Кешування даних товарів
$products = Cache::remember('products.category.1', 3600, function () {
return sProduct::published()
->byCategory(1)
->get();
});
Інтеграція фронтенду
Конвенція Data-атрибутів
sCommerce використовує послідовну конвенцію іменування для фронтенд data-атрибутів для обробки взаємодії користувачів. Всі атрибути слідують шаблону data-sc-{action}.
Атрибути дій
data-sc-buy— Додати товар у кошикdata-sc-remove— Видалити товар з кошикаdata-sc-wishlist— Додати/видалити товар до/з списку бажаногоdata-sc-compare— Додати товар до порівнянняdata-sc-fast-buy— Швидка покупка в один клікdata-sc-increment— Збільшити кількість на 1data-sc-decrement— Зменшити кількість на 1
Атрибути параметрів
data-sc-quantity— Кількість товаруdata-sc-price— Ціна (для клієнтських розрахунків)data-sc-variant— ID варіанту/модифікації
API подій
sCommerce надає просту систему подій для обробки дій з кошиком. Використовуйте callbacks для реагування на дії користувача:
// Прослуховування події додавання в кошик
sCommerce.onAddedToCart = (data) => {
console.log('Товар додано:', data.product);
// Оновити міні-кошик
document.querySelector('.mini-cart-count').textContent = data.miniCart.count;
document.querySelector('.mini-cart-total').textContent = data.miniCart.total;
};
// Прослуховування події видалення з кошика
sCommerce.onRemovedFromCart = (data) => {
console.log('Товар видалено:', data.product);
// Оновити міні-кошик
document.querySelector('.mini-cart-count').textContent = data.miniCart.count;
};
// Прослуховування події оновлення кількості
sCommerce.onUpdatedCart = (data) => {
console.log('Кількість оновлено:', data);
};
// Прослуховування події швидкого замовлення
sCommerce.onFastOrder = (data) => {
if (data.success) {
alert('Дякуємо! Ми зв\'яжемось з вами найближчим часом.');
}
};
Доступні події
sCommerce.onAddedToCart— Спрацьовує при додаванні товару в кошикsCommerce.onRemovedFromCart— Спрацьовує при видаленні товару з кошикаsCommerce.onUpdatedCart— Спрацьовує при оновленні кількості в кошикуsCommerce.onFastOrder— Спрацьовує при відправці швидкого замовлення
Структура даних події
Всі події отримують об'єкт data з наступною структурою:
{
success: true,
product: {
id: 123,
title: "Назва товару",
price: "99.99",
// ... інші дані товару
},
miniCart: {
count: 3,
total: "299.97",
// ... інші дані кошика
}
}
Приклади використання
Картка товару (Каталог)
<div class="product-card">
<button data-sc-wishlist="{{$product->id}}">♥</button>
<input type="number" class="qty-input" value="1" min="1" max="{{$product->inventory}}">
<button data-sc-buy="{{$product->id}}">
@lang('Купити')
</button>
<button data-sc-fast-buy="{{$product->id}}">
@lang('Купити в 1 клік')
</button>
</div>
Кошик покупок
<div class="cart-item" data-item-id="{{$product->id}}">
<svg data-sc-remove="{{$product->id}}">...</svg>
<div class="quantity-control">
<button data-sc-decrement="{{$product->id}}">-</button>
<input type="number" class="qty-input" value="{{$quantity}}" data-sc-quantity="{{$product->id}}">
<button data-sc-increment="{{$product->id}}">+</button>
</div>
</div>