필드 타입 참조

이 페이지

EmDash는 콘텐츠 스키마를 정의하기 위한 16가지 필드 타입을 지원합니다. 각 타입은 SQLite 컬럼 타입에 매핑되며 적절한 관리 UI를 제공합니다.

개요

다음 표는 모든 필드 타입과 해당 SQLite 컬럼을 나열합니다:

타입SQLite 컬럼설명
stringTEXT짧은 텍스트 입력
textTEXT여러 줄 텍스트
urlTEXTURL 값
numberREAL십진수
integerINTEGER정수
booleanINTEGER참/거짓
datetimeTEXT날짜 및 시간
selectTEXT옵션에서 단일 선택
multiSelectJSON다중 선택
portableTextJSON리치 텍스트 콘텐츠
imageTEXT이미지 참조
fileTEXT파일 참조
referenceTEXT다른 항목에 대한 참조
jsonJSON임의의 JSON 데이터
slugTEXTURL 안전 식별자
repeaterJSON반복되는 필드 그룹

텍스트 타입

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 컬럼에 그대로 저장됩니다.

필드 속성

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

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

예약된 필드 슬러그

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

  • id
  • slug
  • status
  • author_id
  • primary_byline_id
  • created_at
  • updated_at
  • published_at
  • scheduled_at
  • deleted_at
  • version
  • live_revision_id
  • draft_revision_id
  • terms
  • bylines
  • byline

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",
];