Ir al contenido

Referencia de tipos de campo

EmDash admite 14 tipos de campos para definir esquemas de contenido. Cada tipo se asigna a un tipo de columna SQLite y proporciona una interfaz de administración apropiada.

TipoColumna SQLiteDescripción
stringTEXTEntrada de texto corto
textTEXTTexto multilínea
numberREALNúmero decimal
integerINTEGERNúmero entero
booleanINTEGERVerdadero/falso
datetimeTEXTFecha y hora
selectTEXTElección única de opciones
multiSelectJSONMúltiples elecciones
portableTextJSONContenido de texto enriquecido
imageTEXTReferencia de imagen
fileTEXTReferencia de archivo
referenceTEXTReferencia a otra entrada
jsonJSONDatos JSON arbitrarios
slugTEXTIdentificador seguro para URL

Texto corto de una sola línea. Úsalo para títulos, nombres y valores cortos.

{
slug: "title",
label: "Titulo",
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 de regex para coincidir

Opciones de widget:

  • Ninguna específica

Texto plano multilínea. Úsalo para descripciones, extractos y texto plano más largo.

{
slug: "excerpt",
label: "Resumen",
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 — Número de filas en el área de texto (predeterminado: 3)

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

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

Los slugs se sanitizan automáticamente: se convierten a minúsculas, los espacios se reemplazan por guiones y se eliminan los caracteres especiales.

Número decimal. Úsalo para precios, calificaciones y medidas.

{
slug: "price",
label: "Precio",
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 (punto flotante de 64 bits).

Número entero. Úsalo para cantidades, conteos y valores de orden.

{
slug: "quantity",
label: "Cantidad",
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.

Verdadero o falso. Úsalo para interruptores y banderas.

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

Almacenado como SQLite INTEGER (0 o 1).

Valor de fecha y hora. Almacenado en formato ISO 8601.

{
slug: "publishedAt",
label: "Fecha de publicacion",
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

Selección única de opciones predefinidas.

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

Opciones de validación:

  • options — Matriz de valores permitidos (requerido)

Almacenado como TEXT que contiene el valor seleccionado.

Múltiples selecciones de opciones predefinidas.

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

Opciones de validación:

  • options — Matriz de valores permitidos (requerido)

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

Contenido de texto enriquecido usando el formato Portable Text. Admite encabezados, listas, enlaces, imágenes y bloques personalizados.

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

Almacenado como matriz JSON de bloques de Portable Text:

[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hola mundo" }]
}
]

Los complementos pueden agregar tipos de bloques personalizados (incrustaciones, widgets, etc.) al editor. Estos aparecen en el menú de comandos de barra diagonal y se renderizan automáticamente en el sitio. Consulta Creando Complementos — Tipos de Bloques de Portable Text.

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

{
slug: "featuredImage",
label: "Imagen destacada",
type: "image",
options: {
showPreview: true,
},
}

Opciones de widget:

  • showPreview — Mostrar vista previa de la imagen en el administrador (predeterminado: true)

Valor almacenado:

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

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

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

Valor almacenado:

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

Referencia a otra entrada de contenido.

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

Opciones de widget:

  • collection — Slug de la colección objetivo (requerido)
  • allowMultiple — Permitir múltiples referencias (predeterminado: false)

Valor almacenado para referencia única:

"01HXK5MZSN..."

Valor almacenado para múltiples referencias:

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

Datos JSON arbitrarios. Úsalo para estructuras anidadas complejas, integraciones de terceros o datos sin un esquema fijo.

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

Almacenado tal cual en la columna JSON de SQLite.

Todos los campos admiten estas propiedades comunes:

PropiedadTipoDescripción
slugstringIdentificador único (requerido)
labelstringNombre para mostrar (requerido)
typeFieldTypeTipo de campo (requerido)
requiredbooleanRequerir un valor (predeterminado: false)
uniquebooleanForzar unicidad (predeterminado: false)
defaultValueunknownValor predeterminado para nuevas entradas
validationobjectReglas de validación específicas del tipo
widgetstringAnulación de widget personalizado
optionsobjectConfiguración del widget
sortOrdernumberOrden de visualización en el administrador

Estos slugs están reservados y no se pueden usar:

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

Importa los tipos de campos 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",
];