Разработка кастомной темы Concrete CMS под ключ

Готовая тема Concrete CMS не соответствует вашему макету и тормозит загрузку? Мы разрабатываем кастомные темы под ключ — от концепции до внедрения. Наша команда создаёт адаптивные, быстрые и легко поддерживаемые решения, которые масштабируются вместе с вашим бизнесом.

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка кастомной темы Concrete CMS под ключ
Средний
~5 дней
Часто задаваемые вопросы

Вы потратили недели на настройку готовой темы Concrete CMS, а она всё ещё грузится 8 секунд и не соответствует макету. Решение — кастомная тема, написанная под ваш дизайн. Мы создаём темы, которые дают 90+ баллов Lighthouse, легко поддерживаются и масштабируются. Более 50 успешных проектов подтверждают: индивидуальная разработка окупается скоростью и гибкостью. Типичные проблемы готовых тем — перегруженный CSS (до 70% неиспользуемых стилей), лишние JavaScript-библиотеки, отсутствие адаптивности под сложные макеты. Всё это напрямую бьёт по Core Web Vitals и конверсии.

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

Готовые темы часто содержат много мёртвого кода. Например, в популярном шаблоне может быть 5 разных стилей для галерей, из которых используется только один. Это увеличивает LCP до 4+ секунд, а CLS — до 0,15. Кастомная тема, написанная под конкретный дизайн, лишена этих проблем. Мы применяем tree-shake CSS, минифицируем JS, внедряем критический CSS. После внедрения кастомной темы мы фиксируем улучшение LCP в среднем на 40%, CLS снижается до 0.05, INP — до 150 мс. Для сравнения: у готовой темы LCP часто превышает 4 секунды.

По данным официальной документации Concrete CMS, кастомная тема позволяет сократить объём передаваемого CSS на 60-80% за счёт удаления неиспользуемых стилей.

Техническая реализация кастомной темы

Структура пакетной темы

Пакет содержит всё необходимое: свою файловую структуру, контроллер, ассеты. При обновлении Concrete CMS тема остаётся совместимой — достаточно переустановить пакет. Упаковка позволяет легко добавлять кастомные блоки и атрибуты, не затрагивая ядро.

Пример структуры пакетной темы
packages/my-theme/
 controller.php # контроллер пакета
 themes/
  my-theme/
   page_types/ # шаблоны типов страниц
    home.php
    default.php
    service-detail.php
   elements/ # части шаблона (header, footer, nav)
    header.php
    footer.php
    navigation.php
   blocks/ # переопределения шаблонов блоков
    content/
     templates/
      two-column.php
   css/
    main.css
   js/
    app.js
   thumbnail.png # превью темы (360×270)
   description.txt
   page.php # базовый шаблон (fallback)
   view.php # главный layout (deprecated, но поддерживается)

Базовый шаблон page.php

page.php — главный layout, в который вставляется содержимое типа страницы. Он подключает CSS/JS и общие элементы.

<?php // packages/my-theme/themes/my-theme/page.php
defined('C5_EXECUTE') or die('Access Denied.');
?>
<!DOCTYPE html>
<html lang="<?= Localization::activeLocale() ?>">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title><?= $c->getCollectionName() ?> | <?= $site->getName() ?></title>
    <?php $html = Loader::helper('html'); echo $html->css('main.css', 'my-theme'); ?>
    <?php View::element('header_required', ['disableTrackingCode' => false]) ?>
</head>
<body class="<?= $c->getPageWrapperClass() ?>">
    <?php View::element('header', [], 'my-theme') ?>
    <main id="main-content">
        <?php echo $innerContent ?>
    </main>
    <?php View::element('footer', [], 'my-theme') ?>
    <?php echo $html->javascript('app.js', 'my-theme') ?>
    <?php View::element('footer_required') ?>
</body>
</html>

Переменная $innerContent вставляет содержимое шаблона типа страницы. Это позволяет разделить структуру и контент.

Шаблон типа страницы

Для каждого типа страницы (например, «Услуга», «Главная») создаётся отдельный файл. В нём можно объявить собственные области (Area) и выводить атрибуты страницы.

<?php // page_types/service-detail.php
defined('C5_EXECUTE') or die('Access Denied.');
$a_hero = new Area('Hero');
$a_content = new Area('Main Content');
$a_related = new Area('Related Services');
$heroImage = $c->getAttribute('hero_image');
$intro = $c->getAttribute('intro_text');
?>
<section class="hero <?= $heroImage ? 'hero--has-image' : '' ?>">
    <?php if ($heroImage): ?>
        <img src="<?= $heroImage->getURL() ?>" alt="<?= h($c->getCollectionName()) ?>">
    <?php endif; ?>
    <div class="hero__content">
        <h1><?= h($c->getCollectionName()) ?></h1>
        <?php if ($intro): ?><p><?= h($intro) ?></p><?php endif; ?>
    </div>
</section>
<div class="container layout-sidebar">
    <article class="content">
        <?php $a_content->display($c) ?>
    </article>
    <aside class="sidebar">
        <?php $a_related->display($c) ?>
    </aside>
</div>

Элемент навигации с активным состоянием

Навигация — один из самых важных элементов. Мы реализуем определение активного пункта на основе ID текущей страницы и её родительских страниц.

<?php // elements/navigation.php
defined('C5_EXECUTE') or die('Access Denied.');
$navHelper = Loader::helper('navigation');
$pages = Page::getByPath('/')->getCollectionChildren();
?>
<nav class="main-nav">
    <ul>
        <?php foreach ($pages as $navPage): ?>
            <?php $isActive = ($c->getCollectionID() == $navPage->getCollectionID() || $navHelper->isParentPage($c, $navPage)); ?>
            <li class="<?= $isActive ? 'active' : '' ?>">
                <a href="<?= $navPage->getCollectionLink() ?>">
                    <?= h($navPage->getCollectionName()) ?>
                </a>
            </li>
        <?php endforeach; ?>
    </ul>
</nav>

Переопределение шаблона блока

Concrete CMS позволяет создать альтернативный шаблон для любого встроенного блока. Редактор увидит его в выпадающем списке при выборе блока.

<?php // packages/my-theme/themes/my-theme/blocks/content/templates/two-column.php
defined('C5_EXECUTE') or die('Access Denied.');
?>
<div class="content-block two-col">
    <div class="col"><?= $content ?></div>
</div>

Сравнение кастомной и готовой темы

Параметр Кастомная тема Готовая тема
Производительность 90+ баллов Lighthouse Часто <70 баллов из-за лишнего кода
Гибкость Любые типы страниц и блоки Ограничена шаблоном
Поддержка Полный контроль, легко обновлять Зависимость от разработчика темы
Стоимость в долгосрочной перспективе Окупается за счёт скорости и низких затрат на поддержку Может потребовать замены при росте проекта

Что входит в разработку

  • Анализ макета и прототипов
  • Разработка структуры темы (пакетная или обычная)
  • Создание типов страниц и областей
  • Написание кастомных шаблонов блоков (если требуется)
  • Адаптивная вёрстка (Mobile First)
  • Настройка Asset Pipeline (Vite/Webpack)
  • Интеграция с атрибутами страницы
  • Документация и обучение редакторов
  • Техническая поддержка в течение 2 недель после сдачи

Как оптимизировать Core Web Vitals в теме?

Для сборки CSS/JS мы используем Vite или Webpack. Собранные файлы кладутся в themes/my-theme/css/ и js/. В page.php подключаем через $html->css() и $html->javascript() — Concrete CMS автоматически добавляет версионный хэш. Это гарантирует, что изменения ассетов сразу применяются без кэширования старой версии. Дополнительно внедряем критический CSS для быстрого первого рендеринга. Результат — LCP < 2 секунд, CLS < 0.05, INP < 150 мс.

Кастомная тема обеспечивает LCP в 2 раза быстрее, чем готовая тема. Шаги:

  1. Анализ макета: выявляем критический путь рендеринга, определяем блокирующие ресурсы.
  2. Сборка через Vite: tree-shake CSS, минификация JS, автообновление при разработке.
  3. Внедрение критического CSS: встраиваем стили для первого экрана в <head>.
  4. Оптимизация изображений: WEBP, lazy loading, адаптивные srcset.
  5. Тестирование: Lighthouse, WebPageTest, реальные устройства.

Сроки и гарантии

Работа Срок
Базовая тема из макета (5–7 типов страниц) 2–4 недели
Адаптивная тема с кастомными элементами 3–6 недель
Полная тема с пакетом, блоками, атрибутами 5–10 недель

Мы гарантируем полное соответствие макету (Pixel Perfect), корректную адаптивность и отсутствие ошибок. После сдачи предоставляем 2 недели бесплатной поддержки. Свяжитесь с нами для оценки вашего проекта — мы проанализируем макет и предложим оптимальное решение. Закажите разработку кастомной темы Concrete CMS и получите консультацию по архитектуре.

Больше информации о возможностях CMS — в официальной документации Concrete CMS.

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

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

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060