EmDash는 콘텐츠 스키마를 정의하기 위한 16가지 필드 타입을 지원합니다. 각 타입은 SQLite 컬럼 타입에 매핑되며 적절한 관리 UI를 제공합니다.
개요
다음 표는 모든 필드 타입과 해당 SQLite 컬럼을 나열합니다:
| 타입 | SQLite 컬럼 | 설명 |
|---|---|---|
string | TEXT | 짧은 텍스트 입력 |
text | TEXT | 여러 줄 텍스트 |
url | TEXT | URL 값 |
number | REAL | 십진수 |
integer | INTEGER | 정수 |
boolean | INTEGER | 참/거짓 |
datetime | TEXT | 날짜 및 시간 |
select | TEXT | 옵션에서 단일 선택 |
multiSelect | JSON | 다중 선택 |
portableText | JSON | 리치 텍스트 콘텐츠 |
image | TEXT | 이미지 참조 |
file | TEXT | 파일 참조 |
reference | TEXT | 다른 항목에 대한 참조 |
json | JSON | 임의의 JSON 데이터 |
slug | TEXT | URL 안전 식별자 |
repeater | JSON | 반복되는 필드 그룹 |
텍스트 타입
string
짧은 한 줄 텍스트. 제목, 이름 및 짧은 값에 사용합니다.
{
slug: "title",
label: "Title",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}
유효성 검사 옵션:
minLength— 최소 문자 수maxLength— 최대 문자 수pattern— 일치시킬 정규식 패턴
위젯 옵션:
- 특정 옵션 없음
text
여러 줄 일반 텍스트. 설명, 발췌문 및 긴 일반 텍스트에 사용합니다.
{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}
유효성 검사 옵션:
minLength— 최소 문자 수maxLength— 최대 문자 수
위젯 옵션:
rows— 텍스트 영역의 행 수 (기본값: 3)
slug
URL 안전 식별자. 다른 필드에서 자동으로 생성되거나 수동으로 입력됩니다.
{
slug: "slug",
label: "URL Slug",
type: "slug",
required: true,
unique: true,
}
슬러그는 자동으로 정리됩니다: 소문자화, 공백은 하이픈으로 대체, 특수 문자 제거.
숫자 타입
number
십진수. 가격, 평점 및 측정값에 사용합니다.
{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}
유효성 검사 옵션:
min— 최소값max— 최대값
SQLite REAL (64비트 부동 소수점)로 저장됩니다.
integer
정수. 수량, 개수 및 주문 값에 사용합니다.
{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}
유효성 검사 옵션:
min— 최소값max— 최대값
SQLite INTEGER로 저장됩니다.
boolean
참 또는 거짓. 토글 및 플래그에 사용합니다.
{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}
SQLite INTEGER (0 또는 1)로 저장됩니다.
날짜 및 시간
datetime
날짜 및 시간 값. ISO 8601 형식으로 저장됩니다.
{
slug: "publishedAt",
label: "Published At",
type: "datetime",
}
유효성 검사 옵션:
min— 최소 날짜 (ISO 문자열)max— 최대 날짜 (ISO 문자열)
저장 형식: 2025-01-24T12:00:00.000Z
선택 타입
select
미리 정의된 옵션에서 단일 선택.
{
slug: "status",
label: "Status",
type: "select",
required: true,
defaultValue: "draft",
validation: {
options: ["draft", "published", "archived"],
},
}
유효성 검사 옵션:
options— 허용된 값의 배열 (필수)
선택된 값을 포함하는 TEXT로 저장됩니다.
multiSelect
미리 정의된 옵션에서 다중 선택.
{
slug: "tags",
label: "Tags",
type: "multiSelect",
validation: {
options: ["news", "tutorial", "review", "opinion"],
},
}
유효성 검사 옵션:
options— 허용된 값의 배열 (필수)
JSON 배열로 저장됩니다: ["news", "tutorial"]
리치 콘텐츠
portableText
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 렌더링 컴포넌트를 참조하세요.
미디어 타입
image
업로드된 이미지에 대한 참조. 치수 및 대체 텍스트와 같은 메타데이터를 포함합니다.
{
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
}
file
문서 또는 PDF와 같은 업로드된 파일에 대한 참조.
{
slug: "document",
label: "Document",
type: "file",
}
값은 파일 참조 및 해당 메타데이터와 함께 객체로 저장됩니다:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}
관계형 타입
reference
다른 콘텐츠 항목에 대한 참조.
{
slug: "author",
label: "Author",
type: "reference",
required: true,
options: {
collection: "authors",
},
}
위젯 옵션:
collection— 대상 컬렉션 슬러그 (필수)allowMultiple— 다중 참조 허용 (기본값: false)
단일 참조는 대상 항목 ID로 저장됩니다:
"01HXK5MZSN..."
다중 참조는 항목 ID 배열로 저장됩니다:
["01HXK5MZSN...", "01HXK6NATS..."]
유연한 타입
json
임의의 JSON 데이터. 복잡한 중첩 구조, 타사 통합 또는 고정 스키마가 없는 데이터에 사용합니다.
{
slug: "metadata",
label: "Metadata",
type: "json",
}
SQLite JSON 컬럼에 그대로 저장됩니다.
필드 속성
모든 필드는 다음 공통 속성을 지원합니다:
| 속성 | 타입 | 설명 |
|---|---|---|
slug | string | 고유 식별자 (필수) |
label | string | 표시 이름 (필수) |
type | FieldType | 필드 타입 (필수) |
required | boolean | 값 필수 (기본값: false) |
unique | boolean | 고유성 강제 (기본값: false) |
defaultValue | unknown | 새 항목의 기본값 |
validation | object | 타입별 유효성 검사 규칙 |
widget | string | 사용자 정의 위젯 재정의 |
options | object | 위젯 구성 |
sortOrder | number | 관리자에서의 표시 순서 |
예약된 필드 슬러그
다음 슬러그는 예약되어 있으며 사용할 수 없습니다:
idslugstatusauthor_idprimary_byline_idcreated_atupdated_atpublished_atscheduled_atdeleted_atversionlive_revision_iddraft_revision_idtermsbylinesbyline
TypeScript 타입
프로그래밍 방식으로 사용하기 위해 필드 타입 정의를 가져옵니다:
import type { FieldType, Field, CreateFieldInput } from "emdash";
const fieldTypes: FieldType[] = [
"string",
"text",
"url",
"number",
"integer",
"boolean",
"datetime",
"select",
"multiSelect",
"portableText",
"image",
"file",
"reference",
"json",
"slug",
"repeater",
];