Кастомная тема Pico CMS: где ломается типовая вёрстка
Типовая тема Pico CMS рассчитана на ровную структуру: одна колонка, меню, список материалов. Пока страницы такие же, шаблоны ложатся без сопротивления — контент лежит в markdown-файлах, шаблонизатор подставляет значения из их метаданных. Но как только появляется нестандартная вёрстка — блоки разной ширины, вложенные секции, повторяющиеся модули с разным набором полей — штатные шаблоны начинают диктовать структуру страницы, а не наоборот.
Первое узкое место — ограничения шаблонизатора: наследование и включения есть, отдельного слоя данных нет. Всё, что не влезает в метаданные файла, приходится вычислять прямо в шаблоне, и одна и та же разметка дублируется в десятке мест. Любая правка блока превращается в проход по всем шаблонам, где он встречается, а расхождение между копиями всплывает уже на продакшене.
Второе — правки в ядре движка. Это самый быстрый способ добиться нужного поведения, поэтому на нём обычно и останавливаются: переопределяют обработчики, дописывают логику в файлы ядра, подменяют вывод. После этого обновление перестаёт быть обновлением — патчи переносят руками, часть изменений тихо теряется, и версия движка замирает на той, где всё ещё сходится.
Цена такой схемы — разъезжающаяся разметка на нестандартных страницах и потеря контроля над версиями. Разбираем, как это закрывается: логика уезжает из ядра в тему, у данных появляется явный контракт, а разметка собирается из модулей, которые можно менять по отдельности.
Что даёт выделенная тема: скорость публикаций и правок
Переработанный слой шаблонов — это когда разметка страницы не пишется руками, а собирается из описания контента. Автор заполняет поля в начале файла и текст в лёгкой разметке, а тема подставляет их в нужные места: заголовок, шапку, сетку карточек, блок связанных материалов. Шаблонизатор Twig даёт для этого наследование шаблонов и макросы — один каркас на весь сайт и отдельные фрагменты под каждый тип блока.
За счёт этого выпуск типовой страницы — не вёрстка с нуля, а копирование заготовки и правка полей: десятки минут вместо часов, и это время не растёт вместе с числом страниц. Когда меняется структура карточки, правка идёт в одном фрагменте и расходится по всем разделам сразу — раньше такие изменения проходили по каждой странице отдельно, и часть из них неизбежно отставала.
Переиспользуемые блоки заодно убирают целый класс отказов разметки: незакрытые контейнеры, разъехавшиеся сетки, разные отступы в однотипных блоках. Разметку формирует шаблон, поэтому она одинакова на всех страницах и не зависит от того, кто и когда сверстал очередной раздел.
Правки контента перестают быть поводом для простоев. Текст и метаданные живут отдельно от кода, тема собирает их в готовую страницу, поэтому редактор публикует материал без выкладки новой сборки, а если шаблон всё же меняется — он проверяется на тестовой копии сайта до переноса на рабочий.
Способы кастомизации: надстройка, форк ядра, свой слой
Тема в Pico CMS — это набор шаблонов Twig плюс файл настроек: ядро отдаёт контент, а шаблоны решают, как он выглядит. Поэтому кастомизация — вопрос не синтаксиса, а того, что произойдёт с правками при следующем обновлении движка.
| Путь | Когда подходит | Чем ограничен при обновлениях |
|---|---|---|
| Дочерняя тема (надстройка) | Смена разметки, стилей, состава блоков; переопределение отдельных шаблонов родителя | Вмешаться в логику ядра нельзя: после смены структуры родителя переопределения сверяют вручную |
| Форк ядра | Нужна нестандартная маршрутизация или свой конвейер обработки страниц | Каждое обновление — ручной перенос правок; конфликты копятся, обновления безопасности откладываются |
| Свой слой шаблонов | Долгое развитие, нестандартный рендеринг, движок подключается как библиотека | Порог входа выше: совместимость со штатным рендерингом команда держит сама |
На практике дочерняя тема закрывает большинство задач оформления и переживает обновления без переписывания. Форк применяют точечно — там, где иначе задачу не решить, и тогда обновление ядра планируют отдельным этапом. Свой слой выбирают, когда шаблонов и логики столько, что штатный рендеринг становится тесным.
Этапы работы: аудит шаблонов, схема, сборка, проверка
Работа начинается не с вёрстки, а с аудита: новая тема должна лечь на существующую структуру контента, а не потребовать переписать материалы. Инвентаризация занимает от половины дня и сразу показывает, где расходятся ожидания заказчика и реальное состояние шаблонов.
- Аудит шаблонов. Обходим каталог темы, собираем все файлы разметки, отмечаем цепочки наследования, дублирующиеся блоки и фрагменты, на которые уже никто не ссылается. Результат — карта зависимостей и список рисков.
- Сверка контента и схемы шаблонов. Сопоставляем поля в метаданных страниц с тем, что фактически читает разметка. Находим поля без вывода и переменные без источника: это главная причина «поехавших» блоков после смены темы.
- Проектирование схемы. Фиксируем базовый каркас, переиспользуемые фрагменты, наборы и порядок наследования. Схема согласуется до первой строки разметки — правки на этом этапе дешевле в разы.
- Сборка. Разметка пишется по схеме, повторы выносятся в общие блоки, шаблоны кэширования настраиваются так, чтобы редактор видел изменения сразу, а посетитель не ждал пересборку.
- Регрессионная проверка. Прогоняем типовые страницы, ленту, поиск, пагинацию, формы и метаданные для соцсетей. Каждый путь проверяется до и после — расхождения фиксируются протоколом.
- Передача темы. Отдаём репозиторий с историей, комментариями в шаблонах и описанием схемы, отдельно обучаем редакторов: как добавить страницу, блок, изображение, не сломав разметку.
Такой порядок даёт предсказуемый результат: к моменту вёрстки спорных решений не остаётся, а после передачи редакторы работают с контентом без участия разработчика.
Что остаётся у заказчика: шаблоны, схемы и регламенты
Проверка приёмки у нас идёт не по «сайт открывается», а по тому, может ли команда заказчика изменить любую страницу и блок без нас. Комплект ниже проверяем вживую: открываем репозиторий, правим тестовый текст, выкладываем, откатываем.
- Исходники темы — репозиторий с полной историей изменений, раздельные ветки под стабильную и рабочую линии, инструкция локального запуска на тестовом стенде.
- Схема шаблонов — карта наследования Twig: какой шаблон базовый, какие блоки переопределяют вложенные, откуда каждый фрагмент берёт данные.
- Карта конфигурации — где лежат настройки Pico CMS, что меняется на уровне окружения, а что потребует правки шаблонов.
- Регламент правок — порядок внесения: ветка, проверка на стенде, согласование, выкладка; кто отвечает за выпуск и как откатиться на предыдущую версию.
- Документация по контенту — как создать страницу, обязательные поля метаданных, правила разметки, хранение и оптимизация изображений.
- Дизайн-токены — цвета, отступы и типографика вынесены в переменные: смена фирменного стиля не трогает структуру шаблонов.
- Чеклист приёмки — пути и сценарии с ожидаемым поведением, по которым заказчик сам принимает правки.
Сопровождение после передачи не обязано оставаться за нами: инженер, знакомый с Twig, входит в проект по этим документам. На практике команда заказчика закрывает правки контента и вёрстки самостоятельно уже со второй итерации.
Кейс: редакторы публикуют без участия разработчика
Сайт на Pico CMS хранит контент в markdown-файлах, поэтому тексты редакторы писали сами. Оформление жило отдельно: чтобы поставить блок с цитатой, поменять порядок разделов или добавить баннер к разделу, приходилось править шаблоны темы и ждать разработчика. Каждая такая правка шла через задачу, проверку и выкладку.
До переработки семь из десяти изменений на странице проходили через инженера, а выпуск материала занимал три-четыре дня: редактор готовил текст, затем ждал вёрстку. В поддержку приходило около двадцати обращений в месяц, половина — про внешний вид страниц.
Что изменили
Тему собрали заново как набор готовых блоков с ограниченными настройками: выравнивание, размер заголовка и число колонок выбираются из списка, а не задаются вручную. Редактор собирает страницу из блоков и сразу видит результат — сломать вёрстку или увести её от фирменного стиля он не может. Файлы контента остались обычным markdown, поэтому старая разметка не потерялась.
Что стало
- Доля правок, требующих разработчика, — с семи из десяти до одной из десяти.
- Время выпуска материала — с трёх-четырёх дней до нескольких часов внутри рабочего дня.
- Обращения в поддержку по вёрстке сократились втрое за первый месяц.
Дополнительный эффект — предсказуемость: новые блоки добавляются в тему отдельно и не задевают уже опубликованные страницы. Обновление контента перестало быть узким местом, а редакторы планируют публикации по календарю, а не по готовности вёрстки.
Технические сомнения перед стартом и ответы на них
Перед стартом заказчики задают одни и те же вопросы: что будет с кастомной темой при обновлении движка, переживёт ли она переезд на другой сервер, не потеряются ли адреса проиндексированных страниц. Ниже — короткие ответы по каждому пункту; если по вашему случаю остаются сомнения, разберём их на этапе оценки.
Тему проектируем так, чтобы её код был отделён от ядра Pico CMS: шаблоны и стили лежат в своей папке, расширения подключаются штатными механизмами, а не правками в файлах движка. Именно это определяет, во что обойдутся последующие обновления и переезд.
Что будет с темой при обновлении движка?
Обновление ставится поверх: переопределения в отдельной папке не конфликтуют с ядром, потому что ядро мы не трогаем. Перед этим снимаем резервные копии и прогоняем тему на тестовом окружении — откат при проблеме занимает минуты.
Как пройдёт перенос на другой сервер?
Контент и тема переносятся вместе с историей изменений, переверстка не нужна. Меняются только путь, права на запись и настройки веб-сервера — их проверяем по списку, чтобы после переезда ничего не поехало.
Сохранятся ли адреса страниц?
Да, если структуру файлов и правила маршрутизации менять последовательно. При перестройке разделов настраиваем перенаправления со старых адресов и проверяем их списком — поисковая выдача и внешние ссылки продолжают работать.
Кто отвечает за совместимость шаблонов?
Мы. Совместимость шаблонов на Twig с актуальной веткой движка — наша зона ответственности: при обновлении проверяем каждый шаблон, правим устаревшие конструкции и фиксируем порядок действий в регламенте, чтобы следующее обновление шло по отработанному сценарию.
Чем переопределение шаблона отличается от плагина?
Переопределение шаблона и плагин — разные точки расширения, и путать их дорого. Первое подменяет файл темы: Twig берёт вашу версию вместо родительской, а данные приходят в неё уже готовыми. Второе подписывается на события ядра и вмешивается в порядок обработки запроса — до вывода страницы, при разборе разметки, при сборке меню.
Порядок обработки задаётся приоритетом подписок: ядро вызывает плагины в известной последовательности, поэтому один плагин видит результат работы другого. Шаблон в этот конвейер не встраивается — он получает то, что уже собрано. Отсюда и разница в конфликтах: плагины могут переписывать данные друг друга, а переопределения конкурируют только за один и тот же файл.
Выбор между ними сводится к тому, что именно меняется:
| Что меняем | Переопределение шаблона | Плагин |
|---|---|---|
| Вёрстку и разметку страницы | Точечно, по файлу темы | Лишний слой |
| Данные, маршруты, поля | Нет доступа к источнику | Через события ядра |
| Порядок обработки запроса | Не участвует | Управляет приоритетом |
| Поведение при обновлении ядра | Сохраняется | Нужна проверка совместимости |
| Поведение при смене темы | Теряется | Сохраняется |
Практическое правило простое: меняется вывод — переопределяем шаблон, меняются данные или логика — пишем плагин. Держать и то и другое в одном месте значит платить дважды при каждом обновлении. Когда слои разделены, обновление ядра не затирает вёрстку, а смена темы не ломает функциональность — расширения перестают конфликтовать между собой.
Что прислать для оценки: состав исходных данных
Оценка темы для Pico CMS зависит не от числа страниц, а от состояния кода и контента. Когда на руках копия сайта и понятный перечень шаблонов, мы считаем работы по факту, а не по догадкам, и возвращаемся с планом и сроками в один заход, без серии уточняющих писем.
- Доступы к копии сайта: отдельный стенд с тем же набором расширений, что на боевом, плюс доступ к файлам темы и к базе, если контент хранится не только в текстовых файлах.
- Текущая тема целиком — архив или репозиторий: шаблоны Twig, партиалы, стили, скрипты, служебные настройки. Не выжимка «только то, что правим»: связи между шаблонами видно лишь в полном дереве.
- Перечень плагинов и сторонних вставок с пометкой, какие критичны. Это сразу показывает участки, где логику придётся переписывать под новую разметку.
- Примеры страниц по типам: главная, список, карточка, материал, форма, страница ошибки. Достаточно 5–10 адресов, чтобы оценить наследование шаблонов и общие блоки.
- Ограничения окружения: версия PHP и набор расширений, лимиты памяти и времени выполнения, схема кеширования, раздача статики.
- Макеты и исходники дизайна, если тема меняется визуально, — с мобильными разрешениями и состояниями элементов.
- Инварианты, которые нельзя потерять при переносе: адреса страниц, метатеги, микроразметка, правила перенаправлений.
- Приоритеты: какие разделы нужны первыми, а что может подождать до следующего этапа.
Если чего-то из списка нет — это не блокер. Опишите, что уже есть, остальное соберём вместе на созвоне: обсудим задачу и вернёмся с составом работ, оценкой и планом.







