projects/org/ideal-shop/V2-drupal11-bootstrap/BUILD-PLAN.md

BUILD-PLAN v2 Д2Б

Версия: 2.0.0
Дата: 2026-03-23


Четыре фазы

ФАЗА 0: ПАРАМЕТРЫ    ФАЗА 1: СБОРКА       ФАЗА 2: ТЕМА         ФАЗА 3: КОНТЕНТ
─────────────────    ─────────────────    ─────────────────    ──────────────────
Требования           Drupal CMS           ideal_theme          Демо-данные
Вариант START        + Commerce           поверх Bootstrap     товары, категории
Ниша товаров         + модули             кастомные шаблоны    для тестирования
Дизайн-пресет

Фаза 0: Параметры (до установки)

Определяем всё ДО первой команды в терминале.

0.1 — Вариант установки

Выбираем стартовый пакет из RECIPES.md:

Вопрос Ответ → Вариант
Нужен ли магазин? Нет → ideal_start_free
Нужна корзина и заказ? Да → ideal_start_base
Нужна онлайн-оплата и СДЭК? Да → ideal_start_prof
Нужен мультисайт? Да → ideal_start_corp

0.2 — Настройки магазина

Записать до установки — они нужны при создании Store:

Название: ...
Страна: RU (влияет на форму checkout)
Валюта: RUB
Оплата: ЮKassa / СБП / наличные
Доставка: СДЭК / Почта / Курьер

0.3 — Ниша товаров

Нужен ли ideal_feat_* рецепт?

Ниша Рецепт
Одежда ideal_feat_fashion
Продукты питания ideal_feat_food
Автозапчасти ideal_feat_auto
Мебель ideal_feat_furniture
Цифровые товары ideal_feat_digital
Универсальный магазин не нужен

0.4 — Дизайн

Заполнить css/tokens.css ДО начала разработки:

--color-primary: #1a4f8a;  /* ← изменить под бренд */
--color-accent:  #e63946;  /* ← акцентный цвет */
--font-base: 'Inter', sans-serif;

Результат Фазы 0: список параметров записан → переходим к Фазе 1.


Фаза 1: Сборка Drupal CMS + модули

Шаг 1.1 — Установить Drupal CMS

composer create-project drupal/cms ideal-shop
cd ideal-shop

Результат: Drupal CMS с базовыми рецептами


Шаг 1.2 — Добавить Commerce и модули

# Магазин
composer require drupal/commerce

# Фильтры
composer require drupal/facets
composer require drupal/search_api

# Функционал
composer require drupal/commerce_wishlist
composer require drupal/commerce_promotion
composer require drupal/fivestar

# Базовая тема
composer require drupal/bootstrap_barrio

# Утилиты
composer require drush/drush

Результат: Все модули загружены


Шаг 1.3 — Установить Drupal + настроить Commerce

drush site:install --db-url=mysql://...

# Включить модули
drush en commerce commerce_product commerce_cart commerce_checkout
drush en facets search_api search_api_db
drush en bootstrap_barrio

# Применить рецепты Drupal CMS
drush recipe recipes/seo
drush recipe recipes/media

Результат: Рабочий Drupal с магазином


Шаг 1.4 — Создать структуру магазина

Через Drupal UI или drush:

Результат: Можно добавлять товары


Фаза 2: Тема ideal_theme

Шаг 2.1 — Создать дочернюю тему

web/themes/custom/ideal_theme/
├── ideal_theme.info.yml
├── ideal_theme.libraries.yml
├── ideal_theme.theme
├── css/
│   ├── tokens.css       ← дизайн-токены (цвета, шрифты)
│   └── custom.css       ← наши стили поверх Bootstrap
├── js/
│   └── custom.js        ← AJAX корзина, фильтры
└── templates/           ← переопределение шаблонов

ideal_theme.info.yml:

name: Ideal Theme
type: theme
base theme: bootstrap_barrio
core_version_requirement: ^11

Результат: Дочерняя тема подключена


Шаг 2.2 — Дизайн-токены

css/tokens.css:

:root {
  --color-primary: #1a4f8a;
  --color-accent: #e63946;
  --color-text: #222;
  --color-bg: #fff;
  --font-base: 'Inter', sans-serif;
  --border-radius: 8px;
}

Результат: Единая цветовая система


Шаг 2.3 — Шаблоны Commerce

Переопределяем в templates/:

Шаблон Что делаем
commerce-product--full.html.twig Страница товара: галерея, варианты, описание
commerce-product-variation.html.twig Варианты (размер, цвет, объём)
views-view-unformatted--products.html.twig Сетка каталога
commerce-cart-block.html.twig Мини-корзина в шапке
commerce-checkout-form.html.twig Оформление заказа

Результат: Кастомный вид магазина


Шаг 2.4 — Карточка товара

Bootstrap Card + наши расширения:

<div class="card h-100 product-card">
  <div class="position-relative">
    {{ product.image }}
    {% if product.discount %}
      <span class="badge bg-danger position-absolute top-0 end-0 m-2">
        -{{ product.discount }}%
      </span>
    {% endif %}
  </div>
  <div class="card-body">
    <h5 class="card-title">{{ product.title }}</h5>
    <div class="price">
      <span class="price-current">{{ product.price }}</span>
      {% if product.price_old %}
        <span class="price-old text-muted">{{ product.price_old }}</span>
      {% endif %}
    </div>
  </div>
  <div class="card-footer">
    {{ add_to_cart_button }}
  </div>
</div>

Результат: Карточка товара


Шаг 2.5 — Sidebar фильтры

Facets → Bootstrap Offcanvas на мобильном, sidebar на десктопе.

{# Десктоп: sidebar слева #}
<aside class="col-lg-3 d-none d-lg-block">
  {{ facets }}
</aside>

{# Мобильный: кнопка + offcanvas #}
<button class="btn btn-outline-secondary d-lg-none"
        data-bs-toggle="offcanvas"
        data-bs-target="#filters">
  Фильтры
</button>
<div class="offcanvas offcanvas-start" id="filters">
  {{ facets }}
</div>

Результат: Фильтры на всех устройствах


Шаг 2.6 — Прогресс доставки и Cross-sell

Новые компоненты (нет в Bootstrap):

{# Прогресс до бесплатной доставки #}
<div class="delivery-progress">
  <div class="progress">
    <div class="progress-bar" style="width: {{ percent }}%"></div>
  </div>
  <p>Ещё {{ remains }} до бесплатной доставки</p>
</div>

Результат: Конверсионные механики


Фаза 3: Демо-данные

Шаг 3.1 — Загрузить тестовые товары

drush default-content:import
# или
drush php-script scripts/import-demo.php

Результат: Заполненный магазин для тестирования


Тестирование

Тест Инструмент
Добавить в корзину Playwright
Оформить заказ Playwright
Фильтры работают Playwright
Mobile (375px) Playwright viewport
Desktop (1440px) Playwright viewport
Lighthouse > 85 Lighthouse CI

Итог по фазам

Шаг Что Оценка
0 Параметры (вариант, Store, ниша, токены) 10 мин
1.1 Drupal CMS (drupal/cms) 5 мин
1.2 Composer модули 3 мин
1.3 Установка + Commerce 10 мин
1.4 Структура магазина 15 мин
2.1 Создать ideal_theme (child of bootstrap_barrio) 5 мин
2.2 tokens.css 5 мин
2.3 Шаблоны Commerce 30 мин
2.4 Карточка товара 15 мин
2.5 Фильтры 20 мин
2.6 Спец-компоненты 20 мин
3.1 Демо-данные 10 мин
Итого ~2 часа

← Назад | Стек → | Рецепты → | Спецификация темы →