Общий принцип
Модуль — тип функциональности. Экземпляр — его конкретная настройка. Например, у модуля «Меню» могут быть экземпляры «Главное меню», «Мобильное меню» и «Меню подвала».
Обычный порядок работы:
- установить модуль;
- создать или открыть экземпляр;
- дать экземпляру понятное название;
- выбрать его файловый шаблон;
- заполнить настройки и языковые вкладки;
- привязать экземпляр к метке страницы.
Шаблоны каждого типа изолированы в modules/<id>/templates.
Новые экземпляры используют нативное хранилище storage/modules/<id>/instances/<instance>.json. Поля редактора обнаруживаются по переменным %field% выбранного шаблона, общие поля — в секции @wrapper, поля элементов — в секции @item. Загруженные изображения размещаются в uploads/media/modules/<id>/<instance>.
Экземпляры, перенесённые из SantaFox, продолжают работать через изолированный legacy-адаптер. Их данные не используются при создании нового экземпляра и не являются частью нативной схемы.
Меню
Строит пункты автоматически по структуре сайта. Учитывает язык, SEO-режим, видимость страницы и активный пункт.
Настройки:
- начальная страница;
- глубина дерева;
- файловый шаблон.
Типовые экземпляры: верхнее, мобильное и нижнее меню.
Дорога — хлебные крошки
Строит цепочку от корня до текущей страницы.
Настройки:
- показывать главную страницу;
- показывать текущую страницу;
- выводить хлебные крошки на главной странице;
- разделитель стандартного шаблона;
- файловый шаблон.
Пользовательский шаблон может содержать разметку Schema.org BreadcrumbList. Каждый пункт должен быть отдельным ListItem с name и position; ссылка размечается свойством item. Только у последнего пункта Google разрешает не указывать item.
Блоки контента
Одиночный набор именованных полей: заголовок, текст, ссылка, изображение и другие поля конкретного блока. Значения редактируются по языковым вкладкам.
Имена переменных берутся из ключей полей. Например, поле title подставляется как %title%.
Повторяющиеся блоки
Набор однотипных элементов: услуги, страны, команда, преимущества и т. п. Поддерживаются порядок, активность, добавление, удаление, языковые поля и изображения.
Редактор разделяет данные на два уровня:
- Общие поля блока — переменные секции
@wrapper, например%zagolovok%и%team%; - Поля элемента — переменные секции
@item, например%image%и%name%.
Форма показывает только переменные, присутствующие в выбранном файловом шаблоне. Если удалить %email% из @item, поле email исчезнет из редактора, но сохранённые данные не удалятся. После возвращения метки поле и его значения снова появятся.
Шаблон обычно имеет две секции:
<!-- @wrapper -->
<div class="items">%items%</div>
<!-- @item -->
<article>%title%</article>
Метка %items% в секции @wrapper обозначает готовый HTML всех активных элементов и должна присутствовать в оболочке. Каждый элемент сетки необходимо оборачивать в отдельный контейнер (article, div и т. п.). Иначе заголовок, текст и остальные части элемента станут самостоятельными дочерними узлами grid-контейнера и визуально разъедутся по разным ячейкам.
Число в поле «Порядок» определяет очередность вывода: сначала меньшие значения. Отключенный элемент остается доступным в админке, но на сайте не показывается. Отметка «Удалить» применяется окончательно после сохранения формы.
Слайдер
Содержит слайды с изображением, заголовком, описанием, кнопкой, ссылкой, порядком и статусом. Переводы одного слайда расположены во вкладках, поэтому форма остаётся компактной.
Поддерживаемые базовые переменные:
%image% %image_large% %image_small% %link_big_image% %title% %description% %text%
Поля импортированных слайдеров также доступны по исходным ключам через слой совместимости.
Галерея
Выводит изображения с мультиязычными заголовками и описаниями. Поддерживает собственный шаблон и секции элемента/обёртки.
Социальные кнопки
Новый экземпляр хранится в нативном JSON-хранилище и редактируется в Модули сайта → Социальные кнопки. Для каждой кнопки задаются название, URL, CSS-класс иконки или изображение из медиатеки, порядок, активность, открытие в новом окне и nofollow. При открытии в новом окне CMS автоматически добавляет безопасные значения noopener noreferrer.
Названия социальных сетей обычно одинаковы для всех языков. Доступны только безопасные адреса http://, https:// и внутренние ссылки. Подпись контейнера автоматически выводится на языке текущей страницы для UA, RU и EN.
Переменные шаблона:
%items% %aria_label% %network% %url% %title% %media% %target% %rel%
Блог
Каждый экземпляр блога содержит собственный набор публикаций. Для записи задаются ЧПУ, дата публикации, активность, общее изображение и мультиязычные поля: заголовок, анонс, полный HTML-текст, автор и подписи ссылок. Запись с будущей датой появится автоматически в назначенное время; версия без заголовка на текущем языке не публикуется.
Количество записей на странице и формат даты задаются в редакторе экземпляра. Пагинация включается автоматически. Лента и полный текст используют один файловый шаблон с секциями:
@wrapper @item @detail @empty
@item_image @detail_image
@pagination @page @page_current
Основные переменные: %items%, %pagination%, %url%, %title%, %summary%, %content%, %image%, %image_large%, %image_small%, %image_block%, %author%, %date%, %published_at%, %read_more%, %back_label% и %back_url%. Изображение одно для всех языков; текстовые поля заполняются на языковых вкладках.
Для галереи, блога и слайдера CMS хранит исходный файл и автоматически создаёт два пропорциональных варианта. Ширина задаётся в настройках экземпляра модуля: %image_large% предназначена для полноразмерного просмотра, %image_small% — для карточек и списков. Старая метка %image% сохранена для совместимости с ранее созданными шаблонами.
Обратная связь
Единый модуль «Обратная связь» создаёт мультиязычные формы и может одновременно отправлять заявки по Email и в Telegram. Каждый канал отдельно включается и настраивается в экземпляре формы. Если включено «Сохранять заявки в CMS», форму можно использовать без внешних каналов: обращения будут записываться только в приватный журнал сайта. Старые пакеты feedback_email и feedback_telegram сохранены только для совместимости существующих сайтов; для новых форм используйте модуль feedback.
Один экземпляр соответствует одной форме. Для каждого языка задаются заголовок, подписи, подсказки, варианты списков, текст кнопки и сообщения. После успешной отправки форма показывает модальное окно либо перенаправляет посетителя на выбранную страницу структуры. Публичный обработчик использует CSRF-токен, honeypot, ограничение частоты и серверную проверку значений. Страницы, содержащие форму напрямую или внутри модального окна, не помещаются в HTML-кеш: одноразовый токен, проверочный вопрос и сообщение после отправки всегда формируются в текущей сессии посетителя. Если один экземпляр формы выведен на странице несколько раз, результат показывается один раз и не теряется при рендеринге вложенного экземпляра. Заявки сохраняются в storage/modules/feedback/submissions/<экземпляр>.jsonl, если включён соответствующий переключатель. Стандартный шаблон имеет собственное адаптивное оформление; дизайн сайта может переопределить акцент через CSS-переменную --primo-feedback-accent.
Специальные коды
Модуль добавляет разрешённые администратором аналитические скрипты, пиксели, meta-теги и другие вставки в head, начало или конец body. Используйте его только для доверенного кода и проверяйте публичные страницы после изменения.
Создание нового шаблона модуля
В редакторе экземпляра нажмите «Новый шаблон». CMS создаст файл только в каталоге текущего модуля. После сохранения выберите его в экземпляре и проверьте все языки.
Не переносите шаблон вручную между разными типами модулей без адаптации секций и переменных.

← Документация