Заполнять ли пользователям форму при создании темы?

Возможно ли заставить пользователей заполнять форму при создании темы? (Например, при открытии окна создания темы отображать форму, которую они должны заполнить.)

Используя шаблон темы при создании категории, я могу добавить подсказки о том, что пользователи должны ввести. Но это отличается от формы. Подсказки можно удалить (поэтому менее опытные пользователи могут не понять, что с ними делать), а страница быстро становится перегруженной, если на ней несколько подсказок.

Форма обеспечила бы более чистый и простой пользовательский опыт в случае, когда я хочу, чтобы пользователи заполняли несколько ключевых полей информации в своей теме при её создании.

Возможно ли это? Я нашёл компонент темы, но, хотя я ещё не до конца понимаю, что он делает, мне кажется, что он не решает мою задачу. Также я видел этот запрос, сделанный несколько лет назад — похоже, никаких действий предпринято не было.

Кроме того, я знаю, что плагин Custom Wizard позволяет создавать форму для заполнения пользователями, но в моём случае форма должна находиться внутри темы Discourse (чтобы затем отображаться как тема со всеми сопутствующими функциями, такими как теги, ответы и т.д.). Кроме того, пользовательский опыт должен оставаться чётко в рамках приложения (я полагаю, что плагин Wizard переводит пользователей на отдельную страницу с другим меню и т.п.).

3 лайка

Это, безусловно, технически возможно в компоненте темы.

3 лайка

Для тех, кто интересуется, вот очень близкая старая тема:

1 лайк

Спасибо.

Как вы думаете, как это может работать?

Вот несколько моих идей, хотя в них ещё есть вопросы, на которые нужно найти ответы:

Базовые функции, которые уже есть: заполнители. Но сейчас это работает по принципу «всё или ничего»

Самая простая структура, которую я могу придумать для имитации поведения формы, — это когда «форма» появляется в редакторе (в том самом редакторе «d-editor», который открывается при нажатии на create topic).

В этом редакторе можно предусмотреть разные «секции», например:

Имя


Местоположение


Проблема


Каждое заголовок секции будет являться заполнителем, поэтому, когда пользователь нажмёт на него, заголовок (например, «Имя») исчезнет.

На данный момент настройка этого возможна с помощью компонента темы с заполнителем текста.

Однако этого недостаточно для поведения, похожего на форму, потому что существующие заполнители работают по принципу «всё или ничего», как я опишу ниже.


Поведение, похожее на форму, с заполнителями. Но как получить доступ к div-элементам в редакторе?

Чтобы сделать это более похожим на форму, каждая секция должна работать независимо.

В настоящее время с компонентом темы с заполнителем текста работает принцип «всё или ничего»: если пользователь нажимает на редактор, все заголовки-заполнители исчезают.

Таким образом, для базового поведения формы, вместо того чтобы все заголовки появлялись или исчезали одновременно, нам нужно, чтобы каждый раздел с заголовком-заполнителем работал независимо. То есть, когда пользователь нажимает на заполнитель «Имя», исчезает только этот заполнитель, а остальные («Местоположение» и «Проблема») остаются.

Это было бы возможно, если бы каждый заполнитель мог быть частью своего собственного div-элемента с уникальным идентификатором внутри текстового редактора. Затем, используя jQuery, можно было бы показывать и скрывать заполнитель в зависимости от того, нажал ли пользователь в эту область. Это требует добавления отдельных div-элементов внутри того, что сейчас является полем textarea, и я не уверен, как это сделать.

Вопрос для этого подхода: Как получить доступ к div-элементам внутри textarea редактора, чтобы можно было реагировать на клики пользователя по ним?


Альтернатива: использование существующей опции текста шаблона. Но как сделать текст неизменяемым?

Вероятно, альтернативой может быть то, что заголовки секций не будут «исчезать» при клике пользователя. То есть заголовки секций (например, Имя, Местоположение и Проблема) будут текстом, который останется на странице. Чтобы сделать это более похожим на форму по сравнению с текущим базовым шаблоном темы по умолчанию:

  1. Текст заголовка секции должен быть неизменяемым пользователем (то есть contenteditable="false").
  2. Разделительные знаки между секциями не должны удаляться пользователем.
  3. Под заголовком секции должно быть свободное место, где явно видно, что пользователь может вводить текст. В текущем шаблоне по умолчанию пользователю пришлось бы перейти к тексту, нажать return, чтобы создать место для ввода.

Вопрос для этого подхода: Как ввести текст шаблона, но (i) сделать этот текст неизменяемым пользователем и (ii) обеспечить явные места для ввода информации пользователем под каждым фрагментом текста?


Возможно, есть более хороший способ реализовать поведение, похожее на форму?

2 лайка

Вероятно, потребуется предварительная обработка шаблона перед рендерингом более сложного набора полей ввода вместо единого текстового поля.

Затем выполнить постобработку для вставки текста в нужные места.

Вам понадобится какой-то стандарт разметки для обозначения заголовков и точек ввода текста…

Это могло бы стать более легковесным решением, так как всё будет оставаться в мире фронтенда. (всё равно будет храниться как единый текстовый пост).

Главным недостатком такого подхода было бы то, что поиск и агрегация данных таким способом стали бы значительно сложнее…

Звучит как интересное проект :slight_smile:

Мне нужно что-то, что пока работает исключительно на стороне клиента. Парсинг и поиск по разным частям формы на данном этапе не требуются, и, как я полагаю, в большинстве случаев они не понадобятся. Речь идёт о том, чтобы убедиться, что пользователи вводят свои ответы последовательно.

Я не понимаю, что вы имеете в виду, когда говорите:

Я надеюсь вернуться к этому вопросу. Я хочу, чтобы на фронтенде пользователи заполняли форму, которая для них выглядела бы именно как форма. Например, когда они создают тему, они видели бы что-то вроде:

«Имя»


«Местоположение»


«Проблема»


Всё это может оставаться на фронтенде. Мне не нужно (было бы неплохо, но пока не обязательно) парсить различные части того, что отправляют пользователи — всё может отправляться так же, как сейчас. Цель — обеспечить более единообразную подачу данных от пользователей и предоставить им чистый интерфейс при наличии разных подсказок.

Разница между этим и тем, что доступно сейчас при использовании шаблонов тем:
  1. Пользователь не мог удалять эти подсказки (то есть не мог удалять «Имя», «Местоположение» и «Проблема»).

  2. В идеале я мог бы добавить стилизацию, напоминающую форму, чтобы пользователю было очевиднее, где нужно вводить текст. Это позволило бы создать более чистый интерфейс для пользователя, создающего тему, когда есть несколько разных подсказок. При использовании шаблонов тем пользователю приходится самому создавать пространство для ввода ответов на каждую подсказку. Кроме того, окно создания темы начинает выглядеть довольно загромождённым, если использовать текущие шаблоны тем с разными подсказками.

@sam ранее ответил:

Кажется, что это действительно возможно. Моя главная проблема: как мне в компоненте темы (или плагине) изменить то, что отображается в окне создания темы? Сейчас это выглядит как чёрный ящик внутри iframe, когда я пытаюсь это сделать.

Я знаю, что, возможно, есть способ зайти внутрь, учитывая, что именно так работают шаблоны тем и плагин placeholder. Но я ещё не разобрался, как они это делают.

Есть ли какие-то советы, что можно сделать с помощью кода, чтобы изменить содержимое окна создания темы?

1 лайк

Посмотрите руководство разработчика по темам Discourse. Это место, с которого стоит начать.

Если вы имеете в виду имя пользователя и местоположение, они находятся в профиле пользователя, поэтому, возможно, они не нужны?

Спасибо за ваш ответ. Я знаком с тем, как создавать темы и плагины. Меня здесь интересует руководство по конкретному коду для доступа к I-frame формы создания темы. Мне не нужно, чтобы кто-то раскладывал всё по полочкам, но любая помощь будет оценена. Ранее я испытывал трудности с поиском способа внесения изменений в эту форму.

Пример с именем, местоположением и т. д. был лишь гипотетическим, так как это типичная форма. В моём конкретном случае требуются различные подсказки.

3 лайка

Меня также интересует решение в виде формы, которая запрашивает у пользователей ввод данных при создании темы. Желательно, чтобы была возможность сделать некоторые поля обязательными. Часть этих данных может быть конфиденциальной, и я хотел бы хранить их в пользовательских полях темы.

1 лайк

Посмотрите Introducing Form Templates