Эта функция больше не находится в экспериментальной стадии!
Подробнее о функции и о том, как использовать её в вашем сообществе, можно узнать здесь: Creating form templates
Привет, сообщество Discourse Meta!
Мы рады представить новую экспериментальную функцию — шаблоны форм. С её помощью вы можете внедрить структурированную форму с валидацией данных в процесс создания тем.

Включение функции
Функция скрыта за глобальным экспериментальным флагом. Чтобы включить её, просто активируйте настройку сайта experimental_form_templates в разделе
Админ ▸ Настройки.
Управление шаблонами
Шаблоны форм можно создавать, редактировать и удалять в разделе
Админ ▸ Настройка ▸ Шаблоны (/admin/customize/form-templates/).
Там вы увидите таблицу со списком шаблонов, существующих на форуме. Вы можете редактировать, удалять и просматривать любой существующий шаблон или создавать новые. В таблице также отображаются категории, в которых каждый шаблон в данный момент активен.
Шаблоны определяются в структуре YAML. Вы можете ввести его вручную или воспользоваться кнопками «Добавить» вверху, которые добавят пример кода YAML в конец файла, определяя определённый тип ввода.
Вот полный пример YAML со всеми типами полей:
- type: input
id: name
attributes:
label: "Полное имя"
placeholder: "Например, Иван Иванов"
description: "Как ваше полное имя?"
validations:
required: true
minimum: 2
maximum: 100
- type: textarea
id: introduction
attributes:
label: "Введение"
placeholder: "Краткое введение"
description: "Напишите краткое введение о себе"
validations:
required: true
minimum: 10
maximum: 500
- type: dropdown
id: fav-animal
attributes:
label: "Любимое животное"
description: "Выберите ваше любимое животное"
none_label: "Выберите вариант"
choices:
- "Собака"
- "Кошка"
- "Другое"
validations:
required: true
- type: multi-select
id: comm-channel
attributes:
label: "Каналы связи:"
description: "Выберите предпочтительные каналы связи:"
none_label: "Выберите вариант"
choices:
- "Электронная почта"
- "Телефон"
- "Мессенджер"
- type: upload
id: cat-photo
attributes:
label: "Фото кошки"
description: "Отправьте фото вашей кошки (или любой кошки)"
file_types: ".jpg, .png"
allow_multiple: false
- type: checkbox
id: accept-terms
attributes:
label: "Я прочитал и согласен с условиями"
description: "Для продолжения необходимо принять условия"
validations:
required: true
Валидация
Для каждого поля можно добавить параметры валидации, которые должны быть выполнены перед созданием формы. Чтобы увидеть список доступных правил валидации, нажмите кнопку Валидация над редактором кода. Это покажет синтаксис для каждого параметра валидации и опишет его назначение.
Параметры валидации
| Ключ | Тип | Описание |
|---|---|---|
| required | boolean | Требует заполнения поля для отправки формы |
| minimum | integer | Для текстовых полей указывает минимальное количество разрешённых символов |
| maximum | integer | Для текстовых полей указывает максимальное количество разрешённых символов |
| pattern | regex string | Для текстовых полей — регулярное выражение, определяющее допустимый ввод |
| type | string | Для полей ввода можно указать ожидаемый тип ввода (text |
Применение шаблона к категории
После создания шаблона формы вы захотите применить его к категории. Для этого перейдите в настройки категории, к которой хотите применить шаблон.
Выберите меню Шаблон, а затем справа используйте переключатель для включения шаблонов форм. После включения вы сможете использовать выпадающий список, чтобы добавить один или несколько шаблонов к категории.
Заполнение формы
После применения шаблона к категории форма шаблона будет автоматически отображаться при создании темы, если выбрана категория с этим шаблоном. Если к категории назначено несколько шаблонов, вы также увидите выборщик для переключения между доступными шаблонами.
При заполнении формы будут применяться все правила валидации, указанные в определении шаблона формы. Отправить форму и создать тему можно будет только после того, как она станет валидной. Нажмите
Создать тему, и контент темы будет сгенерирован на основе всех заполненных полей.
Наконец, после отправки контент темы будет состоять из всех заполненных полей:
Предварительное заполнение значений формы
Вы также можете предварительно заполнить значения формы, вызвав /new-topic с параметрами, соответствующими идентификаторам полей, определённым в шаблоне формы. Например, для ранее использованного в качестве примера шаблона:
/new-topic?name=John%20Smith&favorite-animal=Cat
Дорожная карта
- Сохранение вывода JSON в данные темы при создании темы
- Переключатель для возможности выбора и использования свободного редактора в категориях с шаблонами форм
Как вы можете нам помочь
Мы будем рады услышать ваши отзывы об этой новой функции. Если вы администратор и хотите опробовать её на своём форуме, вы можете включить настройку experimental_form_templates и начать использовать её прямо сейчас!
Пожалуйста, создавайте новые темы с тегом form-templates, чтобы поделиться своим опытом, сообщить об ошибках или предложить улучшения.
Спасибо, что помогаете нам делать Discourse лучше!









