Разработка кастомной темы Drupal: Twig, Core Web Vitals, сборка

Отметим: когда дизайн-макет не вписывается в стандартную сетку Drupal, а клиент настаивает на pixel-perfect вёрстке — кастомная тема становится единственным выходом. Мы не натягиваем Bootstrap на Drupal, а перекладываем макет в Twig-шаблоны так, чтобы каждый блок дышит именно так, как задумано. За 5

Разработка и обслуживание любых видов сайтов:

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

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка кастомной темы Drupal: Twig, Core Web Vitals, сборка
Средний
~1-2 недели

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

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    980
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1240
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    994

Отметим: когда дизайн-макет не вписывается в стандартную сетку Drupal, а клиент настаивает на pixel-perfect вёрстке — кастомная тема становится единственным выходом. Мы не натягиваем Bootstrap на Drupal, а перекладываем макет в Twig-шаблоны так, чтобы каждый блок дышит именно так, как задумано. За 5 лет на рынке и 30+ проектов на Drupal мы научились выжимать максимум из производительности: на одном лендинге для конференции удалось сократить LCP с 3,2 до 1,1 сек, убрав все неиспользуемые скрипты и заменив jQuery на vanilla JS. Это привело к снижению TTFB на 200 мс и сокращению HTTP-запросов с 45 до 12. Дополнительно мы уделяем внимание accessibility: добавляем ARIA-роли и атрибуты, что улучшает UX и SEO.

Почему кастомная тема Drupal быстрее готовой?

Разница в подходе: вместо монолитной библиотеки мы собираем только необходимые компоненты. Сравните: кастомная тема загружается на 40% быстрее готовой темы с кучей лишних модулей. Экономия бюджета на переделку достигает 30%, а затраты на обслуживание снижаются на 20% за счёт отсутствия неиспользуемого кода.

Как избежать bundle bloat при разработке темы?

Первое, что мы делаем — анализируем дизайн и режем его на компоненты: шапка, подвал, сетка контента, карточки. Для каждого компонента создаём отдельный Twig-шаблон и подключаем только нужные CSS/JS через библиотеки. Это исключает bundle bloat — в отличие от готовых тем, где сплошь и рядом тянутся неиспользуемые стили.

Что даёт правильная декомпозиция шаблонов?

Каждый компонент живёт в своём файле: block--system-branding-block.html.twig, node--article--full.html.twig, field--field-image.html.twig. Это позволяет переопределять шаблоны точечно, не затрагивая остальные страницы. В результате мы получаем чистую иерархию, которую легко поддерживать, и избегаем конфликтов при обновлении ядра Drupal. Правильное именование шаблонов — залог масштабируемости, как рекомендовано в Drupal Twig documentation.

Что входит в разработку кастомной темы

Этап Что делаем Результат
1. Аналитика Изучаем дизайн-макет, режем на компоненты, подбираем шрифты и цвета Декомпозиция макета с указанием всех состояний
2. Прототипирование Создаём info.yml, libraries.yml, базовые Twig-шаблоны страниц Структура темы готова к интеграции
3. Вёрстка компонентов Верстаем каждый компонент: шаблон + CSS + JS Pixel-perfect компоненты для всех типов контента
4. Интеграция Подключаем реальные данные, настраиваем поля, изображения, блоки Тема работает с реальным контентом
5. Performance-оптимизация Настраиваем image styles, lazy load, минифицируем ресурсы Core Web Vitals в зелёной зоне
6. Тестирование Проверяем адаптивность, кроссбраузерность, скорость Протокол тестов
7. Деплой и документация Выгружаем тему, описываем структуру, передаём доступы и обучение Готовая тема + инструкция для редакторов

Пример структуры темы

web/themes/custom/my_theme/ ├── my_theme.info.yml ├── my_theme.libraries.yml ├── my_theme.theme ├── config/ │ └── install/ ├── css/ │ └── components/ ├── js/ ├── images/ ├── templates/ │ ├── layout/ │ │ ├── html.html.twig │ │ └── page.html.twig │ ├── content/ │ │ ├── node.html.twig │ │ └── node--article--full.html.twig │ └── field/ └── screenshot.png 

Библиотеки CSS/JS

# my_theme.libraries.yml global: version: VERSION css: base: css/base.css: {} layout: css/layout.css: {} js: js/main.js: { defer: true } dependencies: - core/drupal - core/once slider: version: VERSION css: component: css/components/slider.css: {} js: js/slider.js: {} dependencies: - core/once 

Подключаем библиотеку только там, где она нужна — через attach_library('my_theme/slider') в шаблоне. Это снижает объём загружаемого JS на 30%. А для изображений используем native lazy loading через атрибут loading="lazy" (подробнее на MDN).

Пример Twig-шаблона статьи

{# node--article--full.html.twig #} <article{{ attributes.addClass('article', 'article--full') }}> {% if label %} <h1{{ title_attributes.addClass('article__title') }}>{{ label }}</h1> {% endif %} <div class="article__meta"> {% if display_submitted %} <span class="article__author">{{ author_name }}</span> <time class="article__date" datetime="{{ date.attributes.datetime }}">{{ date }}</time> {% endif %} </div> {{ content|without('links') }} </article> 

Процесс работы и сроки

Мы работаем в несколько итераций: после каждого этапа показываем промежуточный результат. Сроки зависят от сложности:

Уровень сложности Срок Что входит
Базовая тема 5–8 дней Шаблоны статей и страниц, адаптивная вёрстка, библиотеки
С анимациями и кастомными блоками 10–15 дней Slider, lightbox, responsive images, кастомные блоки
Комплексная тема от 20 дней Кастомная админка, несколько view modes, сложная JS-логика

Оценку даём после анализа макета. Оставьте заявку — мы пришлём коммерческое предложение в течение дня.

Типичные ошибки при разработке кастомных тем

  • Игнорирование иерархии шаблонов — если не использовать специфичные имена, Drupal будет рендерить общие шаблоны, и кастомные блоки не отобразятся.
  • Перегрузка глобальной библиотеки — все скрипты и стили на всех страницах. Правильно: только critical CSS глобально, остальное — асинхронно или по требованию.
  • Забыть про image styles — без них изображения грузятся в оригинальном размере, убивая LCP и CLS.
  • Не использовать Twig debug mode — без включения development.services.yml сложно найти нужный шаблон для переопределения.
Иерархия Twig-шаблонов Drupal

Drupal использует соглашение об именовании шаблонов: чем специфичнее имя файла (например, node--article--full.html.twig), тем выше приоритет. Это позволяет переопределять шаблоны для отдельных типов контента или режимов отображения, не затрагивая остальные.

Мы гарантируем, что кастомная тема пройдёт проверку Core Web Vitals на зелёную зону. Опыт 30+ проектов подтверждает: правильный Twig и минимум зависимостей дают скорость на уровне статики. Получите консультацию — расскажем, как реализовать ваш проект.