폼 템플릿 소개

:star: 이 기능은 더 이상 실험적이지 않습니다!

이 기능에 대해 자세히 알고 싶거나 커뮤니티에서 사용하는 방법을 확인하려면 여기를 클릭하세요: Creating form templates

Discourse Meta 커뮤니티 여러분, 안녕하세요!

새로운 실험적 기능인 **폼 템플릿(form templates)**을 소개하게 되어 기쁩니다. 이 기능을 사용하면 토픽 생성 흐름의 일부로 데이터 유효성 검사가 포함된 구조화된 폼을 적용할 수 있습니다.

multiple_form_templates

기능 활성화

이 기능은 사이트 전체 실험 플래그 뒤에 숨겨져 있습니다. 활성화하려면 :wrench: 관리자 ▸ 설정에서 experimental_form_templates 사이트 설정을 켜면 됩니다.

템플릿 관리

폼 템플릿은 :wrench: 관리자 ▸ 커스터마이즈 ▸ 템플릿(/admin/customize/form-templates/)에서 생성, 편집 및 삭제할 수 있습니다.

여기서는 포럼에 존재하는 템플릿 목록이 표로 표시됩니다. 기존 템플릿을 편집, 삭제, 미리보기하거나 새 템플릿을 만들 수 있습니다. 표에는 각 템플릿이 현재 활성 상태인 카테고리도 표시됩니다.

템플릿은 YAML 구조로 정의됩니다. 직접 입력하거나 상단의 “추가” 버튼을 사용하여 특정 입력 유형을 정의하는 예제 YAML 코드 조각을 끝에 추가할 수 있습니다.

모든 필드 유형을 포함한 완전한 YAML 예제는 다음과 같습니다:

- type: input
  id: name
  attributes:
    label: "Full name"
    placeholder: "eg. John Smith"
    description: "What is your full name?"
  validations:
    required: true
    minimum: 2
    maximum: 100
- type: textarea
  id: introduction
  attributes:
    label: "Introduction"
    placeholder: "A short introduction"
    description: "Write a short introdution about yourself"
  validations:
    required: true
    minimum: 10
    maximum: 500
- type: dropdown
  id: fav-animal
  attributes:
    label: "Favorite animal"
    description: "Select your favorite animal"
    none_label: "Select an option"
  choices:
    - "Dog"
    - "Cat"
    - "Other"
  validations:
    required: true
- type: multi-select
  id: comm-channel
  attributes:
    label: "Communication channels:"
    description: "Select your preferred communication channels:"
    none_label: "Select an option"
  choices:
    - "Email"
    - "Phone"
    - "Messenger"
- type: upload
  id: cat-photo
  attributes:
    label: "Cat photo"
    description: "Send a photo of your cat (or any cat)"
    file_types: ".jpg, .png"
    allow_multiple: false
- type: checkbox
  id: accept-terms
  attributes:
    label: "I have read and I agree to the terms"
    description: "You need to accept terms to continue"
  validations:
    required: true

유효성 검사(Validations)

각 필드에 대해 폼을 생성하려면 통과해야 하는 유효성 검사 옵션을 추가할 수 있습니다. 사용 가능한 유효성 검사 목록을 보려면 코드 에디터 위 Validations 버튼을 클릭하세요. 그러면 각 유효성 검사 옵션의 문법과 의도된 사용법이 설명됩니다.

유효성 검사 옵션

Key Type Description
required boolean 폼 제출을 위해 필드 입력을 필수로 합니다
minimum integer 텍스트 필드의 경우 허용되는 최소 글자 수를 지정합니다
maximum integer 텍스트 필드의 경우 허용되는 최대 글자 수를 지정합니다
pattern regex string 텍스트 필드의 경우 허용되는 입력을 지정하는 정규식입니다
type string 입력 필드의 경우 예상되는 입력 유형(text

카테고리에 템플릿 적용

폼 템플릿을 생성한 후에는 해당 템플릿을 카테고리에 적용하고 싶을 것입니다. 이렇게 하려면 템플릿을 적용하려는 카테고리의 설정으로 이동하세요.

Template 메뉴를 선택한 후 오른쪽에서 스위치를 사용하여 폼 템플릿을 켜세요. 활성화되면 드롭다운을 사용하여 카테고리에 하나 이상의 템플릿을 추가할 수 있습니다.

폼 작성

템플릿이 카테고리에 적용되면, 해당 템플릿이 있는 카테고리를 선택하여 토픽을 생성할 때 템플릿의 폼이 자동으로 표시됩니다. 카테고리에 두 개 이상의 템플릿이 할당된 경우, 사용 가능한 템플릿 간을 전환하는 선택기도 볼 수 있습니다.

폼을 작성할 때 폼 템플릿 정의에 지정된 유효성 검사를 따르며, 유효해져야만 :heavy_plus_sign: 토픽 생성을 눌러 모든 입력 필드로부터 토픽 내용을 생성할 수 있습니다.

마지막으로, 제출 후 토픽 내용은 모든 입력된 필드로 구성됩니다:

폼 값 사전 입력(Pre-filling)

폼 템플릿에 정의된 필드 ID와 일치하는 매개변수를 사용하여 /new-topic을 호출함으로써 폼 값을 사전으로 입력할 수도 있습니다. 예를 들어, 이전에 예제로 사용된 템플릿의 경우:

/new-topic?name=John%20Smith&favorite-animal=Cat

로드맵

  • 토픽 생성 시 토픽 데이터에 JSON 출력을 저장
  • 폼 템플릿이 있는 카테고리에서 자유 형식 작성기를 선택하여 사용할 수 있도록 하는 토글 추가

도움을 주실 수 있는 방법

이 새로운 기능에 대한 여러분의 피드백을 듣고 싶습니다. 관리자이시며 포럼에서 시도해 보고 싶으시다면 experimental_form_templates 설정을 켜고 바로 사용하실 수 있습니다!

경험을 공유하거나 버그를 보고하거나 제안을 제공하기 위해 form-templates 태그가 붙은 새 토픽을 시작해 주세요.

Discourse를 더 좋게 만드는 데 도움을 주셔서 감사합니다!

93개의 좋아요
Form submission plugin?
How to include the label/text on the post creation textbox?
New Topic template form, like GitHub Issue templates?
Have users complete form when creating a topic?
Form-fields for topic creation rather than a text box
Visual form entry topic templates?
Anonymous posting for logged-in users
Balancing Costs and Functionality in AI-Powered Forums
Canned Replies without extra lines
Setting Form Templates with a tag
Check boxes and Mandatory fields in Topic templates?
Can topic templates have javascript?
Use a form to make a topic
Anyway to make Forms in Discourse - One Category?
Topic template cannot allow user to upload media, and the 3 lines at the top do nothing
Need an event check list / sign off plugin?
How to track a weekly form on Discourse?
How would someone go about having a category only allow photo "submissions" as new topics?
Discourse forum for feature requests with upvotes + comments?
Introducing Discourse Discover
Configuring our Support category for email-only topic creation
Marketplace category template format change suggestion
Plugin for adding extra fields to the question form
Does this platform not give users templates when creating posts?
Any recommendations on an optimal configuration for managing issues using Discourse?
Are form templates still a thing?
How can I add custom fields to the composer?
Using templates when quoting
Is it possible to change Topic Title prompt for a category?
Creating a system to move topics based on given criteria such as a timestamp
Discourse Preset Topic Composer
How can I add custom fields to the composer?
Custom Topic Fields
Pre-post question/ acknowledgement
Embed additional explainer text in Form Template
Embed additional explainer text in Form Template
How to customize composer
Application Forms for User Groups Automation
Content Validation: Require At Least 2 Keywords Including Either test1 or test2 in New Topics
Structuring an active support community migrating from Facebook
Customer/Product Feedback Channel
Custom topic fields per category or custom topic entry form per category?
Advice on a support forum
Quiz form with explanations?
How to create a custom form in composer?
Form template for Personal messages
Are the tables on top of some posts markdown or a feature?
Building a practitioner directory or category in a community
Building a practitioner directory or category in a community

정말 유용해 보여서 definitely 실험을 위해 활성화할 예정입니다.

유용할 것 같다고 생각하는 한 가지는 템플릿 필드를 사용자 사용자 정의 필드와 연결할 수 있는 기능입니다. 예를 들어, 지원 카테고리에서 지원 담당자가 보통 처음 묻는 질문은 "장비 모델"과 관련된 "웹사이트 URL"입니다. 이 템플릿 기능을 사용하면 이제 새 주제가 생성될 때마다 이 정보를 요청할 수 있습니다 :smiley:

이 두 가지 정보는 다른 사용자에게도 일반적으로 유용하므로 사용자 정의 사용자 필드로 정의되어 있으며, 때때로 입력됩니다. 템플릿 필드가 연결된 사용자 정의 사용자 필드에서 값이 있는 경우 그 값으로 채워질 수 있다면, 자주 사용하는 사용자는 사용자 필드를 입력해 두고 매번 템플릿 필드를 다시 입력할 필요가 없습니다. 가끔 사용하는 사용자는 지원이 필요할 때 템플릿 필드만 입력하면 됩니다.

추가 제안으로, 더 완벽한 기능을 원한다면 이 연결이 역방향으로도 작동하면 좋겠습니다. 누군가가 연결된 사용자 정의 사용자 필드에 없는 데이터를 템플릿에 입력한 경우, 주제가 게시될 때 사용자 정의 필드가 업데이트되면 좋겠습니다.

14개의 좋아요

안녕하세요 :wave:

이번 개선 사항은 정말 훌륭합니다. 다양한 가능성을 열어줍니다. :heart_eyes:

몇 가지 참고 사항:

  1. form_templates.errors.valueMissing.number가 누락된 문자열인 것 같습니다.

  2. tel 유효성 검사가 작동하지 않는 것 같습니다.

  3. 모바일에서 작성기(composer)의 폼 템플릿이 스크롤되지 않습니다.

  4. 모바일에서 폼 템플릿이 사용 가능한 경우, 푸터 버튼이 아무 동작도 하지 않습니다. 이 버튼들을 숨기는 것이 좋을 것 같습니다.
    Screenshot 2023-10-17 at 8.04.50

+ number 타입에 대해 음수를 방지하는 유효성 검사를 추가하면 유용할 것입니다. (예: 가격 입력) :slightly_smiling_face:

+ 동적 조건부 필드 기능을 추가하는 것도 유용할 것입니다.


감사합니다 :slight_smile:

16개의 좋아요

앞서 언급했듯이, 이는 지원 컨텍스트에서 매우 유용할 것이며, 특히 @packman님의 사용자 정의 필드에 대한 제안이 마음에 듭니다.

그룹에 폼 템플릿을 추가하는 것도 로드맵에 포함되어 있나요 (혹은 포함될 수 있을까요)? 그룹 메시징이 사적인 지원을 위해 사용되는 경우, 이는 직원들이 도착하기 전에 질문을 사전에 정리하는 데 특히 유용할 것입니다.


사용자 정의 필드의 가시성에 따라 프라이버시 관련 문제가 발생할 수 있습니다. 예를 들어, 사용자는 개인 카테고리에서 폼 템플릿을 통해 정보를 공유하되, 프로필을 통해 더 넓은 커뮤니티와 해당 정보를 공유하고 싶지 않을 수 있습니다.

정보의 성격에 따라 프로필 및/또는 대부분의 폼에 적합한 하나의 값이 있을 수 있지만, 특정 상황에서 다른 값을 제공하고자 할 수도 있습니다.

해당 필드로부터 폼을 채우고, 입력된 값이 다르면 필드를 업데이트할 수 있는 아이디어는 좋습니다. 하지만 아마도 이것이 프롬프트로 제시되어야 할 것입니다. 이는 매우 빠르고 대략적인 목업이지만, 토픽 생성 후(값이 다르고 비어 있지 않은 경우에만) 아래와 같은 방식이 될 수 있을 것입니다:

9개의 좋아요

이 훌륭한 새 기능에 대한 제 기능 요청은 소프트웨어 지원 게시판에서 흔히 볼 수 있는 것이라 생각합니다.

사람들이 소프트웨어 버전을 명시하지 않는 경우가 많습니다. 바로 그겁니다. 단순하지만, 이는 수많은 무의미한 상호작용(질문과 답변)을 유발하며, 많은 사람들을 돕는 지원자들에게 지루함을 안겨 줍니다 (우리는 커뮤니티에서 가장 중요한 사람들의 피로를 원하지 않으니까요).

따라서 다음 내용을 묻는 양식을 원합니다.

  • FabulousApp 버전은… (옵션이 있는 드롭다운)
  • PHP 버전은… (옵션이 있는 드롭다운)

이제 누군가가 게시판에 자주 글을 올린다고 가정해 보겠습니다. 이 정보는 자주 바뀌지 않지만, 한 달에 한 번 정도는 변경될 수 있습니다.

해당 사용자가 이전에 게시한 글에서 선택한 값을 기본값으로 유지하는 양식을 만들어 주셨으면 합니다. 바로 이것이 제 기능 요청입니다. 어떻게 생각하시나요?

5개의 좋아요

일부 경우, 미리 채워진 필드가 사용자의 시야에서 놓치거나 필요할 때 값을 변경하지 않도록 할 수 있다고 생각합니다. :thinking:

단순히 추측하는 것입니다.

11개의 좋아요

이 두 가지를 결합한 것이 제 사용 사례에서 보고 싶은 모습입니다. 여러 앱을 사용하는 경우, 사용자가 앱을 선택한 후 해당 앱에 해당하는 버전 목록에서 버전을 선택할 수 있기를 바랍니다.

선택지의 경우 제 경험상 이것이 사실입니다. 이메일 문의 양식의 기본 값이 설정되어 있으면, 사용자가 실제로 어떤 앱이나 버전을 사용하든 제출된 대부분의 응답에는 그 기본 값이 그대로 남아 있습니다.

3개의 좋아요

기본값에 대해서는 아마도 사실일 것입니다. 하지만 제가 구상한 방식에서는 필드 값이 사용자가 이전에 사용자 정의 필드에 입력했던 값이 될 것입니다. 이 값들은 오래되었거나 최신 상태가 아닐 수 있지만, 제 사용 사례에서는 현재처럼 값이 없는 경우보다 잘못된 값이 훨씬 적을 것이라고 생각합니다.

2개의 좋아요

전적으로 동의합니다. 제 생각에 이 둘은 대부분 서로 다른 카테고리의 정보입니다. 즉, 특정 시점의 상태와 사용자 설정/신원/등입니다. 제가 기본값에 대한 경험으로 언급한 것은 전자에 더 가깝습니다.

2개의 좋아요

요청 두 가지입니다!

  1. 내용을 자동으로 ```로 감싸는 코드 필드
    • 언어를 선택할 수 있는 드롭다운 메뉴를 포함할 수 있으며, 기본값이 설정되어 있습니다.
  2. 사용자가 필드를 복제할 수 있는 속성 (해당 필드 아래에 + 버튼이 있는 모습을 상상해 보세요).
    • 사용자가 코드 블록 두 개나 여러 이미지를 게시하고 싶어 한다고 상상해 보세요. 하나를 입력한 뒤 + 버튼을 클릭하면 다른 내용을 추가할 수 있습니다.
16개의 좋아요

훌륭한 새로운 기능입니다. 제가 진행 중인 프로젝트에 시의적절할 수도 있겠네요.

잠시 사용해 보고 나서 두 가지 질문이 있습니다:

  1. 현재 사용자가 폼 템플릿을 통해 생성한 토픽 게시글을 수정하면 기본 게시글 편집기만 표시됩니다.
    게시글을 수정할 때 폼 템플릿 편집기도 함께 표시할 계획이 있나요?

  2. 사용자 정의 입력 유형을 추가할 옵션이 제공될 예정인가요?
    사용자가 지도에서 핀을 꽂아 위치를 선택할 수 있는 지도를 생각하고 있습니다. 따라서 이러한 사용자 정의 필드 유형을 정의할 수 있는 옵션이 있으면 좋겠습니다.

6개의 좋아요

제 사용 사례에 딱 맞는 타이밍이네요! 폼 템플릿이 토픽에서 어떻게 렌더링되는지에 대한 커스터마이징이 나중에 가능할 계획이 있는지 궁금합니다.

예를 들어, 아래 이미지에서 checkbox 필드 타입은 텍스트 on으로 렌더링됩니다:

나중에 폼 필드 타입을 사용자 정의된 출력으로 매핑할 수 있게 될까요?

예를 들어, 제 경우에는 체크된/on 상태의 체크박스가 체크박스 포맷인 [x]로 매핑되고, 체크가 없거나 off 상태인 경우 []로 매핑되기를 원합니다.

이 폼 업데이트 덕분에 멋진 아이디어가 많이 떠올라, Ruby를 배우고 이 프로젝트에서 이것저것 시도해 봐야 할 것 같습니다. 훌륭한 작업에 감사합니다!

3개의 좋아요

특정 카테고리에서 특정 동작을 강제하는 정말 멋진 방법입니다! (제 아픈 곳은 채용 공고였는데, 사람들이 제 마음대로 올렸거든요 :smiley: )

아래와 같은 추가 기능들이 있으면 좋겠습니다:

  • „템플릿 없음으로 전환” 기능 (선택 사항). 사용자, 레벨, 그룹 등으로 제한할 수 있으면 좋겠습니다. 일종의 „신뢰해, 내가 뭘 하는지 알아!” 같은 거요.
  • 같은 줄에 여러 필드 배치 (이름 + 성 같은 경우). 충분히 좋은 해결책은 관리자가 폼 템플릿에 클래스 이름을 설정할 수 있도록 하는 것입니다.
  • 리피터 (여러 필드를 그룹화하고 사용자가 더 많이 추가할 수 있도록 하는 것);
7개의 좋아요

다음 기능을 사용할 수 있으면 좋겠습니다:

  • 업로드 필드에 콘텐츠를 붙여넣기[1].
  • 텍스트 영역 외에, 사용자가 일반적인 기능 세트를 사용할 수 있는 컴포저를 추가.[2]

  1. Discourse 게시물에서 업로드 기능은 훌륭합니다. 이 기능은 예를 들어 이미지가 이미 디스크에 저장되어 있어야 하므로 사용하기가 더 어렵습니다. ↩︎

  2. 사용자가 게시물 외에 드롭다운을 선택하길 원한다면, 현재 방식(텍스트 영역)으로는 사용자가 정상적으로 게시물을 작성하는 능력을 크게 떨어뜨립니다. 이미지 붙여넣기, 편집 바 등이 없습니다. ↩︎

9개의 좋아요

여기서 제공된 양식을 사용하여 테마 관련 버그를 보고해 보았습니다. 제 피드백은 다음과 같습니다:

  • 양식 자체는 아주 좋은 아이디어입니다 :+1:
  • 포맷팅 도구가 없다는 것은 큰 단점입니다.
    • 마크다운 문법이 기본적이라고 해도, 툴바를 선택하여 사용하는 것이 종종 더 쉽고 빠릅니다. 가독성 있는 메시지를 작성하는 데 도움이 됩니다.
    • 보고할 문제가 단순하지만 고급 수준의 이슈인 경우 유용할 수 있습니다. 세부 사항을 숨기거나 표를 삽입해야 할 필요가 있을 수 있기 때문입니다.
  • 인라인 업로드가 없다는 것은 불편합니다.
    • 예를 들어, 문제를 단계별로 보여주거나, 이전/이후 결과를 비교하는 경우 등입니다.
    • 여러 장의 스크린샷을 첨부해야 할 경우, 어떤 스크린샷을 봐야 하는지 설명해야 합니다.
  • 토마스처럼, 이미지를 붙여넣을 수 있으면 좋겠습니다. 제 스크린샷이 어디에 저장되었는지 알아내는 데 시간이 좀 걸렸습니다. :smile:
  • 조건부 입력 — "기타"를 선택할 때 해당 내용을 입력할 수 있는 입력란이 나타나면 좋겠습니다.

전반적으로 정말 좋습니다! 앞으로 어떻게 개선될지 기대됩니다. :slight_smile:

9개의 좋아요

한 카테고리에 여러 개의 양식이 활성화되어 있는 경우, 양식을 선택할 수 있는 드롭다운 메뉴가 있다는 점이 직관적이지 않습니다. 새 주제를 생성하면 첫 번째 양식 템플릿이 자동으로 입력되는데, 화면을 잘 모르면 다른 양식이 있을 수도 있다는 사실을 깨닫기 어렵습니다.

양식을 선택 해제하면 "양식 템플릿 선택"이라는 텍스트가 표시되는데, 이는 선택할 수 있는 양식 목록이 있다는 것을 명확하게 보여줍니다. 그러나 양식이 선택되지 않았음에도 작성기에는 여전히 양식이 표시됩니다. 이 부분이 바로 @iamntz가 제안한 ‘템플릿 없음’ 옵션으로 전환할 수 있어야 한다는 데 동의하는 이유입니다.

6개의 좋아요

이전 답변에 추가해서, 저희의 구체적인 사용 사례에 대해 조금 더 맥락을 드리고자 합니다. 저희는 이 기능을 사이트 피드백 카테고리에 구현하기를 원합니다. 이상적으로는 태그 요청과 같은 항목에 대해 폼 템플릿을 사용하고, 폼이 존재하지 않거나 제대로 작동하지 않는 경우 기본 작성기(템플릿 옵션 없음)를 유지하는 것입니다.

즉, 저희가 구상하는 방식은 카테고리에서 새 주제를 만들 때 다음과 같은 화면을 보는 것입니다:

그곳에서 "폼 템플릿 선택"을 보면, 일반적인 방식으로 작성하거나, 이 카테고리에 표준화된 요청/피드백을 위한 폼이 존재하는지 확인할 수 있습니다. :slight_smile:

일반 작성 기능을 사용할 수 있다면 일부 사용자는 폼 템플릿을 보거나 사용하지 않을 수 있다는 논리는 이해합니다. 하지만 필드 밖의 라벨 대신 필드 안의 플레이스홀더 텍스트를 사용하여 현재 스타일링 내에서 벗어나지 않으려고 했습니다. 그래서 관리자가 활성화/비활성화할 수 있는 선택적 기능으로 만드는 것이 좋겠습니다. :upside_down_face:

4개의 좋아요

선택 버튼이 명확하게 강조되어 있다면, Create Topic 버튼과 유사하게 사용자가 클릭하도록 유도하기가 훨씬 쉬울 것입니다.

3개의 좋아요

폼을 더 다뤄본 결과, “템플릿 없음” 옵션의 우회 방법으로 간단한 “자유 응답” 폼을 만들어 템플릿 없음으로 사용할 수 있음을 발견했습니다(아래 스크린샷 참조).

이 아이디어를 덧붙이자면, 드롭다운을 강조하기 위해 색상을 변경하고 싶지 않다면, 카테고리 드롭다운처럼 드롭다운 선택이 있음을 나타내는 아래 화살표를 추가하는 것이 유용한 지표가 될 것 같습니다.

폼이 알파벳 순서로 정렬되어 있음을 발견했습니다. 폼의 순서를 변경할 수 있는 옵션이나, 새 주제를 생성할 때 기본적으로 표시될 폼을 선택할 수 있는 옵션이 있다면 정말 좋겠습니다.

말할 것도 없이, 이 기능이 제공하는 것을 마음에 들어 하며, 이러한 기능 향상이 이루어지기를 기대하고 있습니다. :slight_smile:

6개의 좋아요

무시하고 있는 걸 수도 있지만, 폼 안에 하이퍼링크를 넣는 방법이 있을까요? 예를 들어, 약관에 대한 체크박스가 있다고 가정해 봅시다. description 필드에서 실제 약관으로 연결되는 하이퍼링크가 있으면 유용할 것 같습니다.

이미 이런 기능이 가능한가요?

사용자가 새 게시물을 만들 때 사용자 이름이나 기본 제목 등으로 제목 필드를 자동으로 채우는 방법도 있을까요?

8개의 좋아요