콘텐츠로 이동

필드 유형 참조

EmDash는 콘텐츠 스키마를 정의하기 위해 14가지 필드 유형을 지원합니다. 각 유형은 SQLite 열 유형에 매핑되며 적절한 관리자 UI를 제공합니다.

유형SQLite 열설명
stringTEXT짧은 텍스트 입력
textTEXT여러 줄 텍스트
numberREAL소수점 숫자
integerINTEGER정수
booleanINTEGER참/거짓
datetimeTEXT날짜와 시간
selectTEXT옵션 중 단일 선택
multiSelectJSON다중 선택
portableTextJSON리치 텍스트 콘텐츠
imageTEXT이미지 참조
fileTEXT파일 참조
referenceTEXT다른 항목에 대한 참조
jsonJSON임의의 JSON 데이터
slugTEXTURL-안전 식별자

짧은, 한 줄 텍스트입니다. 제목, 이름, 짧은 값에 사용합니다.

{
slug: "title",
label: "Title",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}

유효성 검사 옵션:

  • minLength — 최소 문자 수
  • maxLength — 최대 문자 수
  • pattern — 일치시킬 정규식 패턴

위젯 옵션:

  • 특정 없음

여러 줄 일반 텍스트입니다. 설명, 발췌문, 더 긴 일반 텍스트에 사용합니다.

{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}

유효성 검사 옵션:

  • minLength — 최소 문자 수
  • maxLength — 최대 문자 수

위젯 옵션:

  • rows — 텍스트 영역의 행 수 (기본값: 3)

URL-안전 식별자입니다. 다른 필드에서 자동 생성되거나 수동으로 입력됩니다.

{
slug: "slug",
label: "URL Slug",
type: "slug",
required: true,
unique: true,
}

슬러그는 자동으로 정리됩니다: 소문자로 변환, 공백을 하이픈으로 대체, 특수 문자 제거.

소수점 숫자입니다. 가격, 평점, 측정값에 사용합니다.

{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}

유효성 검사 옵션:

  • min — 최소값
  • max — 최대값

SQLite REAL(64비트 부동 소수점)로 저장됩니다.

정수입니다. 수량, 개수, 순서 값에 사용합니다.

{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}

유효성 검사 옵션:

  • min — 최소값
  • max — 최대값

SQLite INTEGER로 저장됩니다.

참 또는 거짓입니다. 토글과 플래그에 사용합니다.

{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}

SQLite INTEGER(0 또는 1)로 저장됩니다.

날짜와 시간 값입니다. ISO 8601 형식으로 저장됩니다.

{
slug: "publishedAt",
label: "Published At",
type: "datetime",
}

유효성 검사 옵션:

  • min — 최소 날짜 (ISO 문자열)
  • max — 최대 날짜 (ISO 문자열)

저장 형식: 2025-01-24T12:00:00.000Z

미리 정의된 옵션 중 단일 선택입니다.

{
slug: "status",
label: "Status",
type: "select",
required: true,
defaultValue: "draft",
validation: {
options: ["draft", "published", "archived"],
},
}

유효성 검사 옵션:

  • options — 허용된 값의 배열 (필수)

선택된 값을 포함하는 TEXT로 저장됩니다.

미리 정의된 옵션 중 다중 선택입니다.

{
slug: "tags",
label: "Tags",
type: "multiSelect",
validation: {
options: ["news", "tutorial", "review", "opinion"],
},
}

유효성 검사 옵션:

  • options — 허용된 값의 배열 (필수)

JSON 배열로 저장됩니다: ["news", "tutorial"]

Portable Text 형식을 사용하는 리치 텍스트 콘텐츠입니다. 제목, 목록, 링크, 이미지 및 사용자 정의 블록을 지원합니다.

{
slug: "content",
label: "Content",
type: "portableText",
required: true,
}

Portable Text 블록의 JSON 배열로 저장됩니다:

[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hello world" }]
}
]

플러그인은 사용자 정의 블록 유형(임베드, 위젯 등)을 편집기에 추가할 수 있습니다. 이들은 슬래시 명령 메뉴에 나타나며 사이트에서 자동으로 렌더링됩니다. 플러그인 생성 — Portable Text 블록 유형을 참조하세요.

업로드된 이미지에 대한 참조입니다. 크기와 대체 텍스트와 같은 메타데이터를 포함합니다.

{
slug: "featuredImage",
label: "Featured Image",
type: "image",
options: {
showPreview: true,
},
}

위젯 옵션:

  • showPreview — 관리자에서 이미지 미리보기 표시 (기본값: true)

저장된 값:

{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/image.jpg",
"alt": "Description",
"width": 1920,
"height": 1080
}

업로드된 파일(문서, PDF 등)에 대한 참조입니다.

{
slug: "document",
label: "Document",
type: "file",
}

저장된 값:

{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}

다른 콘텐츠 항목에 대한 참조입니다.

{
slug: "author",
label: "Author",
type: "reference",
required: true,
options: {
collection: "authors",
},
}

위젯 옵션:

  • collection — 대상 컬렉션 슬러그 (필수)
  • allowMultiple — 다중 참조 허용 (기본값: false)

단일 참조 저장 값:

"01HXK5MZSN..."

다중 참조 저장 값:

["01HXK5MZSN...", "01HXK6NATS..."]

임의의 JSON 데이터입니다. 복잡한 중첩 구조, 타사 통합 또는 고정 스키마가 없는 데이터에 사용합니다.

{
slug: "metadata",
label: "Metadata",
type: "json",
}

SQLite JSON 열에 그대로 저장됩니다.

모든 필드는 다음과 같은 공통 속성을 지원합니다:

속성유형설명
slugstring고유 식별자 (필수)
labelstring표시 이름 (필수)
typeFieldType필드 유형 (필수)
requiredboolean값 필수 여부 (기본값: false)
uniqueboolean고유성 강제 (기본값: false)
defaultValueunknown새 항목에 대한 기본값
validationobject유형별 유효성 검사 규칙
widgetstring사용자 정의 위젯 재정의
optionsobject위젯 구성
sortOrdernumber관리자에서의 표시 순서

다음 슬러그는 예약되어 사용할 수 없습니다:

  • id
  • slug
  • status
  • author_id
  • created_at
  • updated_at
  • published_at
  • deleted_at
  • version

프로그래밍 방식 사용을 위한 필드 유형 가져오기:

import type { FieldType, Field, CreateFieldInput } from "emdash";
const fieldTypes: FieldType[] = [
"string",
"text",
"number",
"integer",
"boolean",
"datetime",
"select",
"multiSelect",
"portableText",
"image",
"file",
"reference",
"json",
"slug",
];