Referencia de tipos de campo

En esta página

EmDash admite 14 tipos de campo para definir esquemas de contenido. Cada tipo se asigna a un tipo de columna SQLite y proporciona la UI de administración adecuada.

Resumen

TypeSQLite ColumnDescription
stringTEXTTexto corto en una línea
textTEXTTexto multilínea
numberREALNúmero decimal
integerINTEGERNúmero entero
booleanINTEGERVerdadero/falso
datetimeTEXTFecha y hora
selectTEXTUna opción entre varias
multiSelectJSONVarias opciones
portableTextJSONContenido de texto enriquecido
imageTEXTReferencia a imagen
fileTEXTReferencia a archivo
referenceTEXTReferencia a otra entrada
jsonJSONDatos JSON arbitrarios
slugTEXTIdentificador seguro para URL

Tipos de texto

string

Texto corto de una sola línea. Para títulos, nombres y valores breves.

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

Opciones de validación:

  • minLength — Número mínimo de caracteres
  • maxLength — Número máximo de caracteres
  • pattern — Patrón regex a cumplir

Opciones de widget:

  • Ninguna específica

text

Texto plano multilínea. Para descripciones, extractos y texto plano más largo.

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

Opciones de validación:

  • minLength — Número mínimo de caracteres
  • maxLength — Número máximo de caracteres

Opciones de widget:

  • rows — Filas del textarea (predeterminado: 3)

slug

Identificador seguro para URL. Se genera automáticamente desde otro campo o se introduce manualmente.

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

Los slugs se normalizan automáticamente: minúsculas, espacios sustituidos por guiones, caracteres especiales eliminados.

Tipos numéricos

number

Número decimal. Para precios, valoraciones y medidas.

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

Opciones de validación:

  • min — Valor mínimo
  • max — Valor máximo

Almacenado como SQLite REAL (coma flotante de 64 bits).

integer

Número entero. Para cantidades, recuentos y valores de orden.

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

Opciones de validación:

  • min — Valor mínimo
  • max — Valor máximo

Almacenado como SQLite INTEGER.

boolean

Verdadero o falso. Para interruptores y flags.

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

Almacenado como SQLite INTEGER (0 o 1).

Fecha y hora

datetime

Fecha y hora. Almacenado en formato ISO 8601.

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

Opciones de validación:

  • min — Fecha mínima (cadena ISO)
  • max — Fecha máxima (cadena ISO)

Formato de almacenamiento: 2025-01-24T12:00:00.000Z

Tipos de selección

select

Selección única entre opciones predefinidas.

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

Opciones de validación:

  • options — Array de valores permitidos (obligatorio)

Almacenado como TEXT con el valor seleccionado.

multiSelect

Selección múltiple entre opciones predefinidas.

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

Opciones de validación:

  • options — Array de valores permitidos (obligatorio)

Almacenado como array JSON: ["news", "tutorial"]

Contenido enriquecido

portableText

Texto enriquecido con formato Portable Text. Admite encabezados, listas, enlaces, imágenes y bloques personalizados.

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

Almacenado como array JSON de bloques Portable Text:

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

Los plugins pueden añadir tipos de bloque personalizados (embeds, widgets, etc.) al editor. Aparecen en el menú de comandos con barra y se renderizan automáticamente en el sitio. Consulte Creating Plugins — Portable Text Block Types.

Tipos de medios

image

Referencia a una imagen subida. Incluye metadatos como dimensiones y texto alternativo.

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

Opciones de widget:

  • showPreview — Mostrar vista previa en el admin (predeterminado: true)

Valor almacenado:

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

file

Referencia a un archivo subido (documentos, PDF, etc.).

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

Valor almacenado:

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

Tipos relacionales

reference

Referencia a otra entrada de contenido.

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

Opciones de widget:

  • collection — Slug de la colección de destino (obligatorio)
  • allowMultiple — Permitir varias referencias (predeterminado: false)

Valor almacenado (referencia única):

"01HXK5MZSN..."

Valor almacenado (referencias múltiples):

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

Tipos flexibles

json

Datos JSON arbitrarios. Para estructuras anidadas complejas, integraciones de terceros o datos sin esquema fijo.

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

Almacenado tal cual en la columna JSON de SQLite.

Propiedades de campo

Todos los campos admiten estas propiedades comunes:

PropertyTypeDescription
slugstringIdentificador único (obligatorio)
labelstringNombre para mostrar (obligatorio)
typeFieldTypeTipo de campo (obligatorio)
requiredbooleanExigir valor (predeterminado: false)
uniquebooleanExigir unicidad (predeterminado: false)
defaultValueunknownValor predeterminado para entradas nuevas
validationobjectReglas de validación por tipo
widgetstringSobrescritura de widget personalizado
optionsobjectConfiguración del widget
sortOrdernumberOrden de visualización en el admin

Slugs de campo reservados

Estos slugs están reservados y no pueden usarse:

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

Tipos de TypeScript

Importe los tipos de campo para uso programático:

import type { FieldType, Field, CreateFieldInput } from "emdash";

const fieldTypes: FieldType[] = [
	"string",
	"text",
	"number",
	"integer",
	"boolean",
	"datetime",
	"select",
	"multiSelect",
	"portableText",
	"image",
	"file",
	"reference",
	"json",
	"slug",
];