MORLIX JOURNAL
Разработка темы для CMS: шаблоны, компоненты и стили
Как спроектировать тему для CMS: разделить шаблоны, компоненты и стили, проверить безопасность, адаптивность и подготовить проект к передаче.
Разработка темы для CMS — это создание слоя представления сайта: шаблонов страниц, повторно используемых компонентов, стилей и ресурсов, которые помогают вывести контент в согласованном виде. Хорошая тема учитывает не только внешний вид главной страницы, но и то, как будут выглядеть реальные тексты, записи блога, изображения и формы на разных устройствах.
В статье разберём, где проходят границы темы, как организовать шаблоны и компоненты, что проверить в CSS и перед выпуском. Примеры ниже учебные и не привязаны к API какой-либо CMS: названия файлов, точки подключения и формат пакета нужно сверять с документацией выбранной системы.
Что делает тема и где заканчивается её ответственность
Система управления хранит или получает содержимое и передаёт его в слой представления. Тема определяет, как собрать страницу для посетителя: где находятся навигация и основной текст, как устроены карточки, какие шрифты и отступы используются. У разных CMS эта граница может быть устроена по-разному, поэтому сначала выясните, что именно система ожидает от темы.
Полезно отделять данные от оформления. Например, заголовок статьи и дата публикации относятся к содержимому, а их расположение и стиль — к представлению. Если текст зашит в файл шаблона вместо редактируемого поля, клиенту понадобится разработчик для каждой правки. Если же важная бизнес-логика завязана исключительно на тему, её смена может повлиять не только на дизайн.
При проектировании задайте конкретный вопрос для каждой функции: сохранится ли нужная информация при смене темы? Где живёт обработка формы, а где её внешний вид? Ответ зависит от CMS и подключённых расширений. Подробнее о том, как оценивать основу перед работой, — в статье о выборе темы оформления.
С чего начать разработку темы для CMS
Соберите сценарии и типы страниц
Не начинайте с папок и CSS. Сначала перечислите, какие страницы нужны проекту и кто будет ими пользоваться: главная, список услуг, отдельная услуга, список статей, статья, поиск и страница ошибки — только если эти сценарии действительно необходимы. Для каждой страницы определите обязательные и необязательные поля.
Представим сайт студии с карточками услуг. Одна услуга имеет короткий заголовок и изображение, другая — длинный заголовок без фотографии. Тема должна обработать оба случая: не оставить пустую декоративную рамку и не обрезать смысл текста. Отдельно проверьте состояние пустого списка, длинную навигацию и отсутствие необязательного блока.
Затем зафиксируйте требования к правкам после запуска: что редактор сможет менять сам, какие блоки повторяются и где дизайнеру нужна свобода. Это поможет понять, какие решения должны быть настройками, а какие достаточно один раз определить в шаблоне.
Проверьте контракт выбранной CMS
Уточните поддерживаемую версию платформы, правила регистрации темы, формат шаблонов, подключение ресурсов и порядок обновления. Если тема взаимодействует с модулем блога или формой, выясните, какие данные и точки расширения для этого предусмотрены. Не переносите названия функций из другой CMS: одинаковые слова «тема» и «компонент» не означают одинаковый API.
Разрабатывайте в отдельной тестовой среде с копией безопасных демонстрационных данных. До изменения действующего сайта подготовьте способ вернуть рабочую версию и отдельно проверьте, что резервные копии можно восстановить. Доступы и реальные клиентские данные не нужны для проверки внешнего вида карточки или сетки.
Шаблоны: каркас страниц без дублирования
Шаблон описывает, как собрать страницу определённого типа из общих и уникальных частей. Например, общая оболочка может содержать шапку, основную область и подвал; шаблон статьи добавляет заголовок, метаданные и содержимое; шаблон списка выводит коллекцию карточек и навигацию по страницам, если она нужна.
Общие части стоит выносить так, чтобы изменение навигации не требовало ручного редактирования каждого шаблона. При этом один универсальный файл с десятками условий тоже сложен в сопровождении. Разделяйте шаблоны по реальным различиям в содержимом и поведении, а не ради большого количества файлов.
Для планирования можно использовать условную структуру: отдельные области для шаблонов страниц, повторяемых компонентов и файлов стилей. Это схема распределения ответственности, а не готовая структура пакета Morlix или другой системы. Реальные имена файлов и способы подключения определяет документация конкретной CMS.
Для списка и отдельной статьи проверьте оба направления: шаблон списка должен выводить корректную ссылку на запись, а шаблон записи — работать с длинным заголовком, необязательной обложкой и отсутствующими данными. Не показывайте редакторские подсказки и сообщения об ошибках посетителям.

Компоненты: повторное использование с понятными границами
Компонент — самостоятельная часть интерфейса с определённым назначением и входными данными. Карточка услуги, навигация или блок призыва к действию могут встречаться на нескольких страницах. Вместо нескольких почти одинаковых вариантов полезно описать один компонент и его допустимые состояния.
Для карточки заранее решите, какие поля обязательны: например, название и описание; нужны ли изображение, ссылка и подпись; что происходит, если изображение отсутствует. Используйте одну и ту же семантическую разметку, когда роль блока одинакова. Но не превращайте каждый отдельный отступ в самостоятельный компонент: это усложнит поиск нужного кода.
Небольшой пример разметки
Следующий фрагмент показывает идею карточки. Его можно поместить в обычный HTML-документ и подключить стили ниже. Адрес /contacts здесь условный: в проекте его нужно заменить существующим маршрутом или безопасно получить из CMS.
<article class="service-card">
<h2 class="service-card__title">Дизайн сайта</h2>
<p>Проектируем структуру и оформление страниц.</p>
<a class="service-card__link" href="/contacts">
Обсудить проект
</a>
</article>
В реальной теме значения могут приходить из редактора или базы данных. Используйте предусмотренное системой контекстное экранирование: текст HTML, атрибуты, URL и JavaScript требуют разных способов обработки. Проверяйте допустимые схемы ссылок, а HTML от редакторов выводите только с учётом политики доверия и очистки. Один вызов экранирования для текста не делает произвольный URL или фрагмент скрипта безопасным.
Стили: от основы к состояниям компонентов
Начните с общих решений: ограничение ширины содержимого, типографика, цвета текста и фона, интервалы и поведение изображений. Затем добавляйте стили конкретных компонентов. Согласованные переменные и имена классов упрощают правки, но не требуют привязки к одной методологии именования.
Для карточки из примера можно использовать такой независимый CSS. Цвета приведены только для демонстрации; в реальном проекте их подбирают по дизайн-системе и проверяют контраст.
.service-card {
padding: 1.5rem;
border: 1px solid #b7ccd5;
background: #f5fafc;
color: #173544;
}
.service-card__title {
margin: 0 0 0.75rem;
font-size: 1.25rem;
}
.service-card__link {
display: inline-block;
color: #164a61;
text-decoration: underline;
}
.service-card__link:focus-visible {
outline: 2px solid currentColor;
outline-offset: 3px;
}
Состояние фокуса важно для людей, которые перемещаются по странице клавиатурой. Проверьте также ссылки при наведении и без него, масштабирование текста и контраст не только обычного текста, но и второстепенных подписей. Не удаляйте видимый фокус, пока не предусмотрена понятная замена.
Планируйте адаптивность от содержимого: на узком экране карточки могут идти одной колонкой, а на широком — несколькими, если хватает места для текста. Проверяйте не только заданные контрольные ширины, но и промежутки между ними: там часто появляются переполнения и неудобные переносы. Практические приёмы разобраны в материале про адаптивный дизайн и Mobile First.
Доступность, изображения и скорость работы
Семантические элементы помогают передать смысл структуры: используйте заголовки по назначению, ссылки для переходов и кнопки для действий. У форм должны быть понятные подписи, а сообщения об ошибках — помогать исправить ввод. Порядок элементов в разметке должен оставаться логичным и при отсутствии сложного оформления.
Для содержательных изображений готовьте описательный альтернативный текст; декоративные изображения обычно не должны повторять соседний текст для пользователя вспомогательных технологий. Проверьте, не обрезает ли контейнер важную часть фотографии и что происходит при отсутствии изображения.
Размер файлов, количество загружаемых ресурсов и подключаемых скриптов влияют на загрузку страницы. Выбирайте изображения подходящего размера, избегайте повторного подключения одинаковых библиотек и проверяйте результат на реальном устройстве и медленном соединении. Любые улучшения оценивайте измерением на вашем сайте: сама по себе смена темы не гарантирует определённую скорость или позиции в поиске.
Для SEO тема должна позволять корректно выводить заголовки, ссылки и метаданные там, где за них отвечает CMS или её расширение. Избегайте дублирования одного и того же метаэлемента разными частями системы; проверьте HTML нескольких типов страниц и статус доступности важных ссылок.

Как проверить тему до передачи клиенту
Проверяйте не только демонстрационный набор с идеальными изображениями. Создайте в тестовой среде короткий и длинный заголовки, несколько абзацев, список, таблицу, карточку без фотографии и пустую подборку. Такой набор помогает увидеть ошибки в реальном контенте, прежде чем редактор начнёт наполнять сайт.
- Страницы и ссылки. Откройте основные типы страниц, проверьте переходы, навигацию и предусмотренные состояния без данных.
- Устройства и ввод. Проверьте узкий и широкий экран, клавиатуру, видимость фокуса, масштабирование текста и работу меню без мыши.
- Контент. Проверьте длинные тексты, списки, таблицы, подписи изображений и безопасный вывод пользовательских данных.
- Модули и обновления. Убедитесь, что нужные расширения совместимы с выбранной версией CMS; повторите проверку после обновления в тестовой среде.
- Передача и восстановление. Запишите порядок установки и обновления по документации CMS, владельцев доступов и шаги возврата к рабочей версии. Проверьте восстановление из копии.
Если тема должна распространяться как пакет, проверьте её на чистой тестовой установке той версии системы, для которой она предназначена. Не рассчитывайте, что файлы или настройки из вашей рабочей среды будут присутствовать у другого пользователя.
Типичные ошибки при разработке
Проектировать только главную страницу. В результате статья, поиск или страница ошибки оказываются без законченного состояния. Помогает перечень типов страниц и тестовых данных до начала вёрстки.
Смешивать оформление с обязательной логикой. При смене темы часть функции может исчезнуть. Уточняйте архитектуру выбранной CMS и выносите независимую логику туда, где её рекомендует размещать платформа.
Предполагать, что редактор всегда введёт короткий текст. Снимайте жёсткие ограничения там, где они скрывают содержание, и проверяйте компоненты с материалами разной длины.
Проверять безопасность только по внешнему виду. Корректная карточка не доказывает безопасность данных. Разделяйте доверенные и недоверенные значения, используйте рекомендованные платформой механизмы экранирования и проверяйте контекст вывода.
Что делать дальше
Начните с одного реального сценария и небольшого набора типов страниц. Согласуйте данные, соберите каркас и один повторяемый компонент, затем проверьте его с разным содержимым и на разных устройствах. После этого проще решить, какие части действительно стоит переиспользовать и какие настройки нужны редактору.
Если вы исследуете экосистему Morlix, познакомьтесь с опубликованным описанием тем Morlix. Конкретные правила разработки и доступность инструментов следует уточнять для актуальной версии платформы; учебные примеры из этой статьи не являются инструкцией по установке темы в Morlix CMS.