Создание и настройка пользовательских полей

:bookmark: В этом руководстве объясняется, как создавать и настраивать пользовательские поля в Discourse, включая их добавление в форму регистрации, профили пользователей и каталог пользователей.

:person_raising_hand: Требуемый уровень доступа: Администратор

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

Добавление пользовательского поля

  1. Перейдите в Администрирование > Сообщество > Пользовательские поля (discourse.example.com/admin/config/user-fields).

  2. Если вы еще не создали ни одного пользовательского поля, вы увидите этот экран:

  3. Нажмите кнопку «Добавить пользовательское поле», чтобы создать новое поле.

Выбор типа поля

Тип поля определяет, какое поле ввода увидят пользователи в форме регистрации. Выбирайте тип в зависимости от вида собираемой информации:

Текстовое поле

  • Используйте для коротких вопросов с множеством возможных ответов (например, «В какой компании вы работаете?»)
  • Отображается как однострочное текстовое поле HTML

Многострочное текстовое поле (Textarea)

  • Используйте для вопросов, требующих более длинных, многострочных ответов (например, «Расскажите о себе»)
  • Отображается как многострочное текстовое поле HTML

Дата

  • Используйте для сбора значений даты (например, «Какова ваша дата рождения?»)
  • Отображается как поле выбора даты

Подтверждение

  • Используйте для вопросов «да/нет» (например, «Вы хотите подписаться на нашу рассылку?»)
  • Отображается как флажок HTML
  • Добавьте важные ссылки, которые пользователям нужно подтвердить, используя HTML, например:
    Я соглашаюсь прочитать и соблюдать <a href="https://meta.discourse.org/guidelines">правила сообщества.</a>

Выпадающий список

  • Используйте для вопросов с фиксированным набором возможных ответов (например, «Какой у вас пол?»)
  • Отображается как элемент выбора HTML

Чтобы добавить варианты для выпадающего списка:

  1. Нажмите на поле ввода варианта
  2. Введите ответ и нажмите «Создать»
  3. Повторите для дополнительных вариантов

Готовые варианты должны выглядеть примерно так:

Множественный выбор

  • Используйте для вопросов, где пользователи могут выбрать несколько ответов из набора вариантов (например, «Какие темы вас интересуют?»)
  • Отображается как поле множественного выбора
  • Варианты настраиваются так же, как для выпадающих списков

Настройка имени и описания поля

  • Имя поля: Отображается перед полем ввода в форме регистрации и профиле пользователя
  • Описание поля: Отображается после поля ввода, чтобы помочь пользователям заполнить его

:information_source: Имя и описание поля обязательны для сохранения поля.

Вот как пользовательские поля выглядят в форме регистрации:

Настройка параметров пользовательского поля

Требования к полю

  • Необязательное – Необязательные поля могут оставаться пустыми
  • Для всех пользователей – Когда поле обязательно для всех пользователей, каждый аккаунт, включая уже зарегистрированных пользователей, будет вынужден заполнить его. Это очень полезно в таких случаях, как требование принять условия обслуживания (ToS).
  • При регистрации – Все новые аккаунты будут обязаны заполнить это поле.

Кроме того, в нижней части формы создания вы найдете следующие флажки настроек:

  • Редактируемое после регистрации: Позволяет пользователям обновлять значение поля со страницы своего профиля
  • Отображать в публичном профиле: Отображает значение поля на странице сводки профиля пользователя
  • Отображать на карточке пользователя: Показывает значение поля на карточке пользователя
  • Искомое: Позволяет искать пользователей на основе значения этого поля в каталоге пользователей
  • Показывать в форме регистрации: Управляет тем, отображается ли поле в форме регистрации. Это включается автоматически (и не может быть отключено), если требование к полю установлено как «Для всех пользователей» или «При регистрации», или если поле не редактируется после регистрации.

Отображать в публичном профиле

Если включено, значение поля будет показано на странице профиля пользователя:

Отображать на карточке пользователя

Если включено, значение поля будет отображаться на карточке пользователя:

Искомое

Если включено, вы можете искать пользователей на основе значений их пользовательских полей:

Сохранение и редактирование полей

  1. Нажмите «Сохранить», чтобы добавить поле в список пользовательских полей вашего сайта
  2. Чтобы отредактировать поле, нажмите кнопку «Редактировать» рядом с ним в списке
  3. Чтобы удалить поле, нажмите меню с многоточием (⋮) рядом с ним и выберите «Удалить»

Добавление пользовательских полей в каталог пользователей

  1. Перейдите в каталог пользователей
  2. Нажмите на иконку гаечного ключа:

  1. Отметьте пользовательские поля, которые вы хотите отобразить
  2. Нажмите «Сохранить»

Выбранные пользовательские поля теперь будут отображаться в таблице каталога пользователей:

40 лайков
Any Plugins/Easy Mods for an Extended User Profile
Add introductory text for sign-up
Setting Security Parameters: Log-In, Read-Only, Protected Groups
Theme-Component v Plugin: What's the difference
User preference on theme components
Users self-select Category on Registration... is it possible?
Private custom user fields...?
Can we implement a system for user remarks during registration for admin review?
User customizable theme components (how-to)
This freaking software works so well I can’t even
User Field Prompt
New user reviews: admin assignment and logging of progress
Add users to groups on signup
How to add min or max values in custom fields?
Add a custom per-user setting in a plugin
Welcome questions on the first screen for bio
Announcing - Gender Pronouns Userfield on Meta
Grant Custom Badge Upon Reading ToS
If topic info is too long, tags are cut off and create a blank line
Required vs. optional sign-up fields
Terms of Service Checkbox
Hidden User Fields
New user filter by custom field and contact
Social Features
Where in Discourse can users publicly share PII?
Linking "static" information about member to topic posted
Add custom fields to signup and login
Using Discourse as a social media platform
Add users to groups through custom field automation
Custom user post display
Disable account confirm emails when creating users via API
Links in additional fields
Clickable Social Icon Links on Profile
Extend Existing Controller?
Requiring acceptance of terms and conditions
"Fake" OAuth Provider?
Extend Existing Controller?
Allow users to block keywords
Customize Your Site Branding
Restrict the users to post in the groups who haven't uploaded their profile picture
Adding non-visible user custom fields to the API
Seeking Advice: making a discourse forum hyper local
Can add short message to verify? Just input phone number can sign up
Add terms when make new topic
Export custom field for users in discourse hosted forum
Customizing Sign-up and Log in
Grouping poll results by user custom field
Disclaimer for tutorials
How to add custom logic input on the signup page?
Terms of service changes in Discourse platform
Custom user fields not available in api

По-моему, под этими заголовками отсутствуют два изображения:

Не уверен, связано ли это с темой Отсутствующие изображения на Meta.discourse.org — опубликую там тоже.

Я вижу эти изображения? (также в окне инкогнито)

1 лайк

Я не вижу эти

Но второе работает в моём цитировании.

Изменить

1 лайк

Любопытно, я вижу вторую картинку в цитате, но не в оригинальном посте ^^

1 лайк

Хм, это интересно. Думаю, скоро выйдет исправление для проблемы Missing images at Meta.discourse.org, так что, надеюсь, всё уладится. :crossed_fingers:

2 лайка

Есть ли настройка, которую мне нужно изменить, чтобы указать максимальную длину пользовательского поля? Сейчас в этом поле «Test», которое я создал как тестовое пользовательское поле, я не могу ввести даже один символ в своём профиле (даже слово «Test», как показано на скриншоте).

Мне бы очень понравился тип поля: ссылка / URL. Это возможно?

Так как URL — это текст, текстовое поле технически подходит, @Vaping_Community. Однако вам могут потребоваться дополнительные функции, например, проверка значения или что-то подобное.

Вы можете создать или найти тему Contribute > Feature с описанием вашей идеи. :slight_smile:

3 лайка

Есть ли планы разрешить многострочный ввод/компоновку для пользовательских полей? :folded_hands:

Обратите внимание: если вы хотите вставить ссылку в одно из пользовательских полей, необходимо использовать HTML-синтаксис!
<a href="url">текст ссылки</a>

Например, для указания на правила/политики сообщества:

1 лайк

Могу ли я сопоставить пользовательское утверждение из моего SSO в Auth0 с пользовательским полем? Сейчас пользователь вводит информацию о поле в Auth0, а затем должен ввести её повторно при регистрации. Я хотел бы, чтобы значение было перенесено автоматически, если это возможно.

Это возможно, да:

В вашей конечной точке SSO вы можете сопоставить утверждение с полезной нагрузкой, например:

const ssoPayload = {
  nonce: nonce,
  email: user.email,
  external_id: user.sub,
  username: user.nickname,
  name: user.name,
  add_groups: a_custom_group,
  'custom.user_field_1': user['https://yourdomain.com/company_id'],
  'custom.user_field_2':  [и так далее...]
3 лайка

Спасибо @dax

Есть ли способ проверить имя поля в базе данных? Например, у нас есть поле «имя», я пробовал custom.firstname, custom.first_name и custom.firstName, но ни один из них не привел к заполнению полей на экране регистрации.

Я проверил логи ошибок, чтобы подтвердить, что токены полей приходят так, как показано выше.

Разбираясь в коде глубже, это только для SSO Discourse Connect? Мы используем плагин Auth0

Синтаксис должен быть custom.user_field_x, где x — числовой идентификатор поля, отображаемый в /admin/config/user-fields/{x}/edit.

Функция сопоставления недоступна напрямую в плагине Auth0.

Тем не менее, есть варианты реализации того, что вы описываете:

  • создание компонента темы. Вы можете добавить небольшой фронтенд-скрипт, который автоматически синхронизирует пользовательское поле в Discourse со значением, уже сохранённым в Auth0. Например, когда пользователь входит в систему, а поле пустое, скрипт может вызвать защищённую конечную точку (небольшую облачную функцию), которая получит значение поля из Auth0 и обновит профиль в Discourse через API.
  • использование инструментов автоматизации. Вы также можете использовать внешние сервисы автоматизации, такие как Zapier или Make, для выполнения этой синхронизации вне Discourse. Преимущество в том, что вам не нужно писать или поддерживать код, достаточно только платить за сторонний сервис.
  • кастомная разработка. Мы можем расширить сам плагин Auth0, чтобы он нативно поддерживал сопоставление пользовательских утверждений (custom claims) с пользовательскими полями при входе, либо создать собственный плагин, работающий в паре с плагином Auth0.

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

Если бы я был на вашем месте, я бы склонился ко второму варианту — использованию сторонних инструментов, или рассмотрел бы возможность подачи запроса на новую функцию или запроса на кастомную разработку (в зависимости от оценки нашими менеджерами проектов) для расширения самого плагина Auth0.

Если вы заинтересованы в рассмотрении последнего варианта, мы можем продолжить обсуждение в личном порядке.

1 лайк

Интересует, есть ли более удобный способ реорганизовать длинный список полей пользователя, чем по одному кликать на маленькие стрелочки, чтобы перемещать их вверх или вниз по одному шагу за раз…? :face_with_peeking_eye:

В общем списке полей пользователя я не вижу, как отличить обязательные поля (например, «Je suis… Pays»), которые отображаются в форме регистрации, от необязательных (например, «Mes attentes»). Я что-то упускаю, или это упущение? Очень неудобно редактировать поле, чтобы узнать, является ли оно необязательным. (Не уверен, что это правильное место для такого вопроса, не знал, куда его разместить.)

Возможно, JSON, предоставляющий данные, может немного помочь. Это не совсем красиво, но вы можете посмотреть на /admin/config/user-fields.json и увидеть что-то вроде

    {
      "id": 18,
      "name": "Age",
      "description": "How old are you?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "requirement": "optional",
      "show_on_profile": false,
      "show_on_user_card": false,
      "show_on_signup": false,
      "searchable": false,
      "position": 9
    },
    {
      "id": 17,
      "name": "pets",
      "description": "choose your favourite",
      "field_type": "dropdown",
      "editable": true,
      "required": false,
      "requirement": "optional",
      "show_on_profile": false,
      "show_on_user_card": false,
      "show_on_signup": false,
      "searchable": false,
      "position": 10,
      "options": [
        "cat",
        "mouse",
        "dog"
      ]
    },

Но, конечно, это не так красиво, как информация в интерфейсе.

1 лайк

Ого, это действительно гораздо удобнее для работы!
Значит, я могу просто отредактировать этот файл и всё готово? Существует ли он в таком виде на моём сервере и где его найти? :heart_eyes::heart_eyes::heart_eyes: