Налаштування модуля Drupal Commerce для інтернет-магазину
Drupal Commerce — це не плагін, а набір модулів, які вбудовують e-commerce логіку безпосередньо в архітектуру Drupal. Товар — це вузол (node) з полями, варіант — сутність (entity), замовлення — entity зі своїм workflow. Ця гнучкість дозволяє будувати нестандартні каталоги та процеси, але вимагає розуміння Entity API Drupal та специфіки Commerce 2.x.
Commerce 2.x vs Commerce 1.x
Commerce 2.x переписаний для Drupal 8+ і несумісний з першою версією. Ключові відмінності:
| Commerce 1.x (D7) | Commerce 2.x (D8/9/10) | |
|---|---|---|
| Архітектура | Rules + Features | Плагіни + конфіг YAML |
| Управління станом | Rules | State Machine |
| Мультисайт | Складно | Магазини з коробки |
| API | Hook-based | OOP + Events |
Якщо проект на Drupal 7 — розглядається або Commerce 1.x (legacy), або міграція на D10.
Базова установка через Composer
composer require drupal/commerce drupal/commerce_price drupal/commerce_store \
drupal/commerce_product drupal/commerce_order drupal/commerce_cart \
drupal/commerce_checkout drupal/commerce_payment drupal/commerce_tax
drush en commerce commerce_product commerce_cart commerce_checkout \
commerce_payment commerce_tax commerce_order -y
drush cr
Мінімальний набір залежностей встановлюється автоматично через Composer.
Налаштування магазину
Commerce 2.x підтримує кілька магазинів в одному Drupal-інстансі:
/admin/commerce/config/stores → Add store
Конфігурація магазину:
- Default currency: BYN / RUB / USD (повинна збігатися з базовою валютою сайту)
- Countries: список країн для доставки та платіжних адрес
- Default tax type: якщо магазин платить ПДВ, вказується тип податку
- Billing countries: країни, для яких буде розраховуватися податок
Магазин прив'язаний до URL-адреси сайту — важливо при мультисайтовому налаштуванні.
Типи продуктів
Commerce використовує концепцію product/variation: Product — це "карточка товару", Variation — конкретний SKU з ціною та атрибутами.
Створення типу продукту:
/admin/commerce/config/product-types → Add product type
Налаштування варіацій:
/admin/commerce/config/product-variation-types → Add variation type
→ Додаємо атрибути: Колір, Розмір
→ Автоматично генерувати варіації: Так
Після створення атрибутів Drupal Commerce автоматично генерує матрицю варіацій на формі редагування товару.
Програмна робота з продуктами:
use Drupal\commerce_product\Entity\Product;
use Drupal\commerce_product\Entity\ProductVariation;
// Створення варіації
$variation = ProductVariation::create([
'type' => 'default',
'sku' => 'CHAIR-BLK-L',
'price' => new Price('1499.00', 'RUB'),
'field_color' => ['target_id' => $colorTermId],
'field_size' => 'L',
'status' => TRUE,
]);
$variation->save();
// Створення продукту з варіацією
$product = Product::create([
'type' => 'default',
'title' => 'Офісне крісло',
'stores' => [$storeId],
'variations' => [$variation],
'status' => TRUE,
]);
$product->save();
Checkout Flow
Commerce 2.x дозволяє повністю налаштувати процес оформлення замовлення через конфігурацію Checkout Flows:
/admin/commerce/config/checkout-flows → Manage
Доступні кроки (panes):
-
commerce_checkout_panes.login— автентифікація/гість -
commerce_checkout_panes.order_information— адреса доставки -
commerce_checkout_panes.payment_information— дані платежу -
commerce_checkout_panes.review— підтвердження -
commerce_checkout_panes.completion— сторінка успіху
Користувацький pane створюється як плагін:
/**
* @CommerceCheckoutPane(
* id = "custom_gift_note",
* label = @Translation("Gift note"),
* default_step = "order_information",
* )
*/
class GiftNotePane extends CheckoutPaneBase
{
public function buildPaneForm(array $pane_form, FormStateInterface $form_state, array &$complete_form): array
{
$pane_form['gift_note'] = [
'#type' => 'textarea',
'#title' => $this->t('Повідомлення одержувачу'),
'#rows' => 3,
];
return $pane_form;
}
}
Підключення платіжних шлюзів
Commerce 2.x має офіційні та community-модулі для платіжних шлюзів:
# Stripe
composer require drupal/commerce_stripe
drush en commerce_stripe -y
# PayPal
composer require drupal/commerce_paypal
# Для РФ/СНГ — ЮКасса (неофіційний)
composer require drupal/commerce_robokassa
Конфігурація шлюзу:
/admin/commerce/config/payment-gateways → Add payment gateway
→ Plugin: Stripe
→ Mode: Live / Test
→ Secret key: sk_live_...
→ Publishable key: pk_live_...
Управління складом
Commerce 2.x не включає інвентаризацію з коробки. Використовується модуль:
composer require drupal/commerce_stock
drush en commerce_stock commerce_stock_local -y
Після цього на варіації товару з'явиться поле залишку. Модуль підтримує кілька локацій (складів):
/admin/commerce/config/stock → Stock service: Local stock
/admin/commerce/config/stock-locations → Add location
Програмне управління залишком:
use Drupal\commerce_stock\StockServiceManagerInterface;
$stockService = \Drupal::service('commerce_stock.service_manager')
->getService($productVariation);
// Отримати рівень залишку
$level = $stockService->getStockLevel($productVariation, $locations);
// Змінити залишок (надходження)
$stockService->createTransaction(
$productVariation,
$locationId,
[],
100, // кількість
new Price('0', 'RUB'),
'RUB',
TRANSACTION_TYPE_IN,
[]
);







