Налаштування модуля Commerce для інтернет-магазину на Drupal

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування модуля Commerce для інтернет-магазину на Drupal
Складна
~2-4 тижні
Часті питання

Наші компетенції:

Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування модуля 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,
    []
);