Разработка кастомного шаблона Joomla под ключ

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

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

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

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

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

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

Этапы разработки

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

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

Разработка кастомного шаблона Joomla

Отметим: когда стандартный шаблон Joomla не соответствует дизайну макета или требованиям производительности, наша команда создаёт уникальное решение. Мы разрабатываем кастомные шаблоны под ключ: от анализа макета до финального деплоя. В работе используем Joomla 5, современные сборщики Vite и оптимизируем метрики Core Web Vitals. Типовая ситуация: клиент приносит макет в Figma с нестандартной сеткой, а готовый шаблон не поддерживает нужное расположение блоков. В результате — избыточный CSS, медленная загрузка и потеря позиций в выдаче. Мы решаем эту задачу с нуля, проектируя шаблон под конкретный дизайн. Через правильные кэши и асинхронную загрузку модулей добиваемся TTFB менее 200 мс. При разработке применяем TypeScript для сборки скриптов и SCSS для стилей — это даёт полный контроль над итоговым кодом.

С какими проблемами сталкиваются владельцы сайтов на Joomla?

  • Готовые шаблоны часто имеют избыточный CSS, который замедляет загрузку. Типичный случай: LCP превышает 2.5 секунды из-за неоптимизированных стилей.
  • Несоответствие дизайну — стандартные модульные сетки не позволяют реализовать сложные макеты. Клиент приносит макет в Figma, а шаблон не поддерживает нужное расположение блоков.
  • Проблемы с обновлениями — многие доработанные шаблоны ломаются при обновлении Joomla. Мы используем дочерние шаблоны и переопределения layout, чтобы обновления проходили безболезненно.

Как мы создаём кастомный шаблон Joomla: разбор кейса

Недавно к нам обратился клиент из сферы услуг: нужен был сайт на Joomla 5 с уникальным дизайном и быстрой загрузкой. Дизайн включал нестандартную сетку с двумя боковыми панелями и анимацией при скролле. Мы спроектировали шаблон с нуля, использовали CSS Grid для позиционирования и Vite для сборки. В результате LCP снизился с 3.2 до 1.4 секунды, а сайт занял топ-3 в выдаче по целевым запросам.

Структура кастомного шаблона

Пример структуры директорий шаблона
templates/my-template/
├── index.php              # Главный файл шаблона
├── templateDetails.xml    # Манифест (обязательно)
├── component.php          # Шаблон для компонентов (print-версия)
├── error.php              # Страница ошибок
├── offline.php            # Страница обслуживания
├── css/
│   ├── template.css
│   └── custom.css
├── js/
│   └── template.js
├── images/
│   └── logo.svg
├── html/                  # Переопределения layout компонентов
│   ├── com_content/
│   │   └── article/
│   │       └── default.php
│   └── layouts/
│       └── joomla/
└── language/
    └── ru-RU/

Манифест templateDetails.xml

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.1" type="template" client="site">
    <name>my-template</name>
    <author>Your Company</author>
    <version>1.0.0</version>
    <description>Кастомный шаблон</description>

    <files>
        <filename>index.php</filename>
        <filename>templateDetails.xml</filename>
        <folder>css</folder>
        <folder>js</folder>
        <folder>images</folder>
        <folder>html</folder>
    </files>

    <positions>
        <position>header</position>
        <position>banner</position>
        <position>top-a</position>
        <position>top-b</position>
        <position>main-top</position>
        <position>sidebar-left</position>
        <position>sidebar-right</position>
        <position>main-bottom</position>
        <position>footer</position>
    </positions>

    <config>
        <fields name="params">
            <fieldset name="basic">
                <field name="logo" type="media" label="Логотип" />
                <field name="accent_color" type="color" label="Цвет акцента" default="#0066cc" />
                <field name="show_backtotop" type="radio" label="Кнопка вверх"
                    default="1">
                    <option value="1">Да</option>
                    <option value="0">Нет</option>
                </field>
            </fieldset>
        </fields>
    </config>
</extension>

Главный файл index.php

<?php defined('_JEXEC') or die; ?>
<!DOCTYPE html>
<html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
<head>
    <jdoc:include type="metas" />
    <jdoc:include type="styles" />
    <?php
    // Подключаем CSS шаблона
    $wa = $this->getWebAssetManager();
    $wa->registerAndUseStyle('template.my-template', 'css/template.css');
    $wa->registerAndUseScript('template.my-template', 'js/template.js', [], ['defer' => true]);
    ?>
</head>
<body class="site <?php echo $this->params->get('pageclass_sfx', ''); ?>">

<header class="site-header">
    <?php if ($this->params->get('logo')) : ?>
        <a href="<?php echo $this->baseurl; ?>" class="site-logo">
            <img src="<?php echo HTMLHelper::_('image', $this->params->get('logo'), '', [], true, 1); ?>"
                 alt="<?php echo $sitename; ?>" loading="eager">
        </a>
    <?php endif; ?>

    <nav class="site-nav">
        <jdoc:include type="modules" name="header" style="none" />
    </nav>
</header>

<div class="site-wrapper">
    <?php if ($this->countModules('sidebar-left')) : ?>
    <aside class="sidebar sidebar--left">
        <jdoc:include type="modules" name="sidebar-left" style="xhtml" />
    </aside>
    <?php endif; ?>

    <main class="site-content" id="main-content">
        <jdoc:include type="message" />
        <jdoc:include type="component" />
    </main>

    <?php if ($this->countModules('sidebar-right')) : ?>
    <aside class="sidebar sidebar--right">
        <jdoc:include type="modules" name="sidebar-right" style="xhtml" />
    </aside>
    <?php endif; ?>
</div>

<footer class="site-footer">
    <jdoc:include type="modules" name="footer" style="none" />
    <p>© <?php echo date('Y'); ?> <?php echo $sitename; ?></p>
</footer>

<jdoc:include type="scripts" />
</body>
</html>

Дочерний шаблон (Child Template)

Joomla 4+ поддерживает child templates. Согласно документации Joomla, достаточно создать минимальный манифест:

<!-- templateDetails.xml дочернего шаблона -->
<inheritable>0</inheritable>
<parent>cassiopeia</parent>

Child template наследует все файлы родителя, переопределяет только то, что нужно. Обновления родителя применяются автоматически.

Почему кастомный шаблон лучше готового?

Кастомный шаблон загружается в 2–3 раза быстрее типовых решений, потому что мы включаем только нужные стили и скрипты. Вы получаете уникальный дизайн, полный контроль над HTML-структурой и возможность оптимизировать SEO-метрики.

Состав работ

  • Манифест шаблона со всеми необходимыми файлами и позициями модулей.
  • Адаптивная верстка под мобильные устройства, планшеты и десктоп.
  • Переопределения layout компонентов (статьи, категории, контакты) по необходимости.
  • Интеграция с вашим контентом — настройка модулей, главного меню, виджетов.
  • Тестирование на разных браузерах и устройствах.
  • Документация по структуре и настройке шаблона.
  • Обучение администратора работе с шаблоном.
  • Поддержка в течение 30 дней после сдачи проекта.

Сравнение кастомного и готового шаблона

Характеристика Кастомный шаблон Готовый шаблон
Скорость загрузки (LCP) < 1.5 с > 2.5 с
Уникальность дизайна 100% Ограничен настройками
SEO-оптимизация Полный контроль Часто избыточный код
Адаптивность Под любой макет Фиксированные сетки
Обновления Безопасные через child theme Могут сломать кастомизацию

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

Этап Длительность
Аналитика 1–2 дня
Проектирование 2–3 дня
Верстка 3–5 дней
Интеграция 1–2 дня
Тестирование 1–2 дня
Деплой 0.5 дня
  1. Аналитика — изучаем ваш дизайн-макет, требования к функционалу, целевые метрики.
  2. Проектирование — создаем прототип шаблона, определяем позиции модулей, разрабатываем структуру файлов.
  3. Верстка — пишем HTML/CSS/JS с использованием современного стека (Vite, SCSS, TypeScript).
  4. Интеграция — переносим верстку в Joomla, подключаем модули, настраиваем параметры.
  5. Тестирование — проверяем на соответствие дизайну, производительность (Core Web Vitals), кроссбраузерность.
  6. Деплой — размещаем на хостинге, передаем документацию, проводим обучение.

Ориентировочные сроки и стоимость

Разработка кастомного шаблона по готовому дизайну с 8–12 позициями модулей занимает от 5 до 15 дней. Стоимость рассчитывается индивидуально, но обычно проект обходится в разы дешевле, чем в крупных студиях — за счет прямого контакта с разработчиком и отсутствия наценок менеджеров.

Чек-лист типичных ошибок

  • Не все позиции модулей указаны в templateDetails.xml.
  • Отсутствует файл error.php — при ошибке 500 пользователь видит пустую страницу.
  • Не добавлена поддержка атрибута loading="lazy" для изображений в контенте.
  • JavaScript не отложен (defer или async) — блокирует рендеринг.
  • Манифест не содержит параметров для настройки логотипа или цветовой схемы.

Оценка проекта

Свяжитесь с нами — мы проанализируем ваш макет, предложим оптимальную архитектуру шаблона и рассчитаем точную стоимость. Вы получите консультацию инженера с 8-летним опытом работы с Joomla и более 50 реализованными проектами. Включим настройку всех позиций модулей, переопределения layout и поддержку после запуска. Закажите разработку под ключ — гарантируем совместимость с Joomla 5.

Headless CMS: Strapi, Directus, Sanity, Contentful, Drupal

Традиционная CMS хороша до момента, когда дизайнер говорит «хочу анимацию при скролле с parallax», фронтенд — «нам нужен React», а SEO-специалист — «почему TTFB 3.4 секунды». В этот момент монолитная архитектура начинает мешать всем сразу. Я сталкивался с этим десятки раз: сайт на WordPress с ACF разрастается до 47 плагинов, админка тормозит, а каждый редизайн превращается в переписывание шаблонов.

Headless CMS отделяет управление контентом от его представления. Редакторы работают в удобном интерфейсе, разработчики получают данные через API и строят фронтенд на любом стеке. Звучит просто. На практике — выбор CMS, моделирование данных и настройка API занимают значительную часть проекта. За более чем 7 лет мы провели более 50 внедрений — расскажу, как не наступить на типичные грабли.

Почему headless CMS выгоднее монолита?

Монолитная CMS (WordPress, Joomla, Drupal в классическом режиме) смешивает бэкенд и фронтенд. Любое изменение вёрстки — это изменение шаблонов, часто с риском поломать админку. Headless даёт свободу: фронтенд на React, Vue или Svelte, а контент живёт отдельно. Результат — скорость загрузки (LCP часто падает с 4-6 с до 1-1,5 с), безопасность (нет публичного доступа к админ-панели), масштабирование (контент отдаётся через CDN без нагрузки на сервер). Плюс возможность переиспользовать контент в мобильных приложениях, киосках, email-рассылках через единый API.

Какую headless CMS выбрать под проект?

Нет универсального инструмента. Выбор зависит от команды, сложности контента и инфраструктуры. Разберём ключевые варианты.

Strapi — open-source, self-hosted, Node.js. Подходит командам, которым нужен контроль над данными и возможность кастомизации API. Плагинная архитектура позволяет добавлять кастомные маршруты, middleware, lifecycle hooks. REST и GraphQL из коробки. Разворачивается за час — в 3 раза быстрее Drupal. Слабое место — версии v4 и v5 несовместимы между собой, миграция болезненная. Наш опыт показывает: для стартапов и средних проектов Strapi — оптимальный баланс гибкости и скорости.

Directus — тоже open-source, но другой подход: не генерирует схему, а оборачивает существующую базу данных (PostgreSQL, MySQL, SQLite) в REST/GraphQL API. Если база данных уже есть — Directus подключается к ней без миграций. Удобно для проектов, где данные уже живут в PostgreSQL и нужен быстрый admin UI + API. Экономия времени на этапе интеграции — до 30%.

Sanity — облачная CMS с real-time редактором. Отличительная черта — GROQ (Graph-Relational Object Queries), собственный язык запросов, который мощнее REST для сложных связей между документами. Portable Text для структурированного контента. Подходит для медиа, издательств, маркетинговых сайтов с нестандартными редакционными процессами. Гарантирует скорость даже при 500+ одновременных редакторах — проверено на проектах с ежеминутным обновлением ленты новостей.

Contentful — enterprise облачная CMS. Сильная сторона — локализация (до 1000 локалей), богатый SDK для всех платформ, Contentful Apps для кастомных UI. Слабая — цена при масштабировании и ограниченная гибкость моделей данных по сравнению с open-source альтернативами.

Drupal — не headless в чистом виде, но с модулем JSON:API и GraphQL превращается в мощный API-first бэкенд. Сильная сторона — зрелость, гранулярные права доступа, enterprise-клиенты (NASA, weather.com). Порог входа высокий, для сложных государственных или корпоративных порталов альтернатив мало. Мы используем его только когда требуется строгая иерархия ролей и аудит доступа.

CMS Хостинг API Лучший сценарий
Strapi Self-hosted / Cloud REST, GraphQL Стартапы, кастомизация
Directus Self-hosted / Cloud REST, GraphQL Обёртка над existing DB
Sanity Облако GROQ, GraphQL Медиа, сложный контент
Contentful Облако REST, GraphQL Enterprise, локализация
Drupal Self-hosted JSON:API, GraphQL Госсектор, сложные права

Последствия неправильного моделирования контента

Моделирование контента — критичный этап. Ошибка на этом этапе стоит дорого. Типичная проблема: поле body типа rich text для всего. Через полгода контент-менеджер хочет вставить видео между абзацами, добавить pull quote с кастомным стилем, встроить интерактивную таблицу. Rich text это не позволяет. Решение — Portable Text (Sanity) или кастомные компоненты в Strapi/Directus через Dynamic Zone. Мы всегда закладываем на этапе проектирования 2-3 итерации с заказчиком, чтобы схема покрывала 90% будущих кейсов. На одном проекте это сэкономило 80 часов переработок — бюджет на моделирование окупился втрое.

Как мы строим проекты на headless CMS

Фронтенд под headless CMS практически всегда идёт на Next.js (App Router) или Nuxt. Для Contentful и Sanity — ISR: страницы статически генерируются при билде, обновляются через revalidatePath() при изменении контента через webhook. Для Strapi/Directus с частым обновлением данных — SSR с cache: 'no-store' или SWR на клиенте.

Кейс: редизайн корпоративного сайта производственной компании. Предыдущий сайт — WordPress с ACF, 200+ страниц, 4 языка. Проблемы: TTFB 3,8 с, редакторы жаловались на медленный админ.
Перешли на Strapi (self-hosted, PostgreSQL), Next.js App Router. Контентная модель: Page с Dynamic Zone (секции Hero, TextBlock, Gallery, TeamGrid, ContactForm). Локализация через Strapi i18n plugin + next-intl на фронтенде. Деплой фронтенда на Vercel с ISR, ревалидация через Strapi webhook на entry.publish.

TTFB с 3,8 с упал до 180 мс (статика с CDN) — разница в 21 раз. Редакторы получили чистый интерфейс без 47 плагинов. Стоимость проекта — в диапазоне 300 000 – 500 000 рублей, экономия на хостинге после миграции — около 15 000 рублей в месяц.

Для понимания headless CMS и TTFB — рекомендую базовые статьи.

Процесс внедрения разбит на этапы:

  1. Аудит контентных потребностей — собираем все типы контента, связи, требования к локализации, интеграции.
  2. Проектирование схемы данных — создаём модели, поля, валидацию, роли доступа. Документируем в Swagger/OpenAPI.
  3. Настройка CMS и API — разворачиваем выбранную CMS, настраиваем REST/GraphQL endpoints, плагины, webhooks.
  4. Разработка фронтенда — подключаем Next.js/Nuxt, настраиваем ISR/SSR, компоненты секций, роутинг.
  5. Миграция контента (если есть legacy) — автоматическая загрузка через API или скрипты.
  6. Тестирование — проверка API endpoints, регрессия, нагрузочное тестирование, Core Web Vitals.
  7. Деплой — настройка CDN, SSL, CI/CD, мониторинг.

Сколько времени занимает внедрение?

Стандартный путь включает все этапы. Миграция с WordPress на headless CMS занимает столько же времени, сколько сам проект — часто больше. Особенно если в WordPress накоплены кастомные поля через ACF с нестандартной структурой. Наши средние сроки:

Тип проекта Срок
Простой сайт на Strapi + Next.js 4–8 недель
Многоязычный корпоративный сайт 8–16 недель
Миграция с WordPress на headless +4–8 недель к основному
Drupal enterprise-портал 3–6 месяцев

Стоимость рассчитывается индивидуально после брифа. Бюджет типового внедрения — от 150 000 до 500 000 рублей в зависимости от сложности. Экономия на хостинге за счёт статической генерации — до 40% в месяц.

Чек-лист: 5 неочевидных моментов при выборе headless CMS
  • Проверьте, поддерживает ли CMS мультисайтинг — если планируете несколько доменов, многие open-source решения не умеют разделять контент по доменам без костылей.
  • Уточните формат истории изменений — Strapi хранит drafts только для publish-версий, а Directus — полный аудит всех изменений.
  • Протестируйте скорость работы admin panel на слабом интернете — Sanity работает в реальном времени через WebSocket, что может быть проблемой при плохом соединении.
  • Оцените сложность кастомных полей — в Contentful добавление нового поля требует деплоя, в Strapi — только перезапуска сервера.
  • Узнайте про лицензионные ограничения — Strapi v5 перешёл на Elastic License, что может повлиять на коммерческое использование.

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

  • Документация схемы данных и API (Swagger/OpenAPI)
  • Настроенная админ-панель с правами доступа
  • Обучение редакторов (2-часовая сессия)
  • Тестовый стенд на время разработки
  • Гарантия 1 месяц на баги после запуска
  • Поддержка после релиза (включая хотфиксы 24/7)

Headless CMS разработка — это не просто замена инструмента, а смена парадигмы работы с контентом. Мы помогаем сделать этот переход без простоев и потери данных. Получите консультацию и предварительную оценку — оставьте заявку на сайте. Закажите внедрение headless CMS с гарантией результата.