Настройка модуля 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

Настройка модуля Commerce для интернет-магазина на Drupal

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
Мультисайт Сложно Stores из коробки
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.

Настройка магазина (Store)

Commerce 2.x поддерживает несколько магазинов в одном Drupal-инстансе:

/admin/commerce/config/stores → Add store

Конфигурация магазина:

  • Default currency: BYN / RUB / USD (должна совпадать с базовой валютой сайта)
  • Countries: список стран для shipping и billing адресов
  • Default tax type: если магазин платит НДС, указывается тип налога
  • Billing countries: страны, для которых будет рассчитываться налог

Магазин привязан к URL-адресу сайта — это важно при мультисайтовой настройке.

Типы продуктов

Commerce использует concept product/variation: Product — это «карточка товара», Variation — конкретный SKU с ценой и атрибутами.

Создание типа продукта:

/admin/commerce/config/product-types → Add product type

Настройка вариаций:

/admin/commerce/config/product-variation-types → Add variation type
→ Добавляем атрибуты: Цвет (color), Размер (size)
→ Генерировать вариации автоматически: Да

После создания атрибутов 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

# Для РФ/СНГ — ЮKassa (неофициальный)
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,
    []
);

Налоги

composer require drupal/commerce_tax
drush en commerce_tax -y

Конфигурация НДС для Беларуси (20%):

/admin/commerce/config/tax-types → Add tax type
→ Display inclusive pricing: Yes
→ Add tax rate: 20%
→ Territories: BY

Commerce Tax автоматически применяет нужную ставку по адресу покупателя.

Отображение каталога

Commerce продукты — обычные Drupal-ноды с дополнительными полями. Views подходит для построения каталога:

/admin/structure/views → Add view → Commerce products
→ Format: Unformatted list / Grid
→ Filter: Product: Status (Published)
→ Filter: Product: Stores → текущий магазин
→ Exposed filter: Product: Price range, Attributes
→ Sort: по дате, цене, релевантности

Для фасетного поиска — модуль search_api + facets + бэкенд Solr или Elasticsearch.

Производительность

Для высоконагруженных каталогов:

# BigPipe — прогрессивная загрузка страниц
composer require drupal/big_pipe

# Кеш для анонимных пользователей
/admin/config/development/performance → Page cache: 300 seconds

# Redis как кеш-бэкенд
composer require drupal/redis

В settings.php:

$settings['cache']['default'] = 'cache.backend.redis';
$settings['redis.connection']['host'] = '127.0.0.1';

Сроки реализации

  • Установка + настройка магазина + типы продуктов: 2–3 дня
  • Checkout flow с кастомными полями: 2 дня
  • Интеграция платёжного шлюза: 1–3 дня (зависит от шлюза и наличия модуля)
  • Управление складом через commerce_stock: 1–2 дня
  • Каталог с Views + фасетный поиск: 2–4 дня
  • Налоги + мультивалютность: 1–2 дня

Базовый рабочий магазин: 1,5–2 недели. Сложный каталог с кастомной бизнес-логикой — 3–5 недель.