Riferimento Tipi di Campo

In questa pagina

EmDash supporta 16 tipi di campo per definire schemi di contenuto. Ogni tipo corrisponde a un tipo di colonna SQLite e fornisce un’interfaccia amministrativa appropriata.

Panoramica

La seguente tabella elenca ogni tipo di campo e la sua colonna SQLite:

TipoColonna SQLiteDescrizione
stringTEXTInput di testo breve
textTEXTTesto multilinea
urlTEXTValore URL
numberREALNumero decimale
integerINTEGERNumero intero
booleanINTEGERVero/falso
datetimeTEXTData e ora
selectTEXTScelta singola da opzioni
multiSelectJSONScelte multiple
portableTextJSONContenuto di testo arricchito
imageTEXTRiferimento immagine
fileTEXTRiferimento file
referenceTEXTRiferimento a un’altra voce
jsonJSONDati JSON arbitrari
slugTEXTIdentificatore sicuro per URL
repeaterJSONGruppo di campi ripetitivi

Tipi di Testo

string

Testo breve su una singola riga. Utilizzalo per titoli, nomi e valori brevi.

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

Opzioni di validazione:

  • minLength — Conteggio minimo di caratteri
  • maxLength — Conteggio massimo di caratteri
  • pattern — Pattern regex da soddisfare

Opzioni widget:

  • Nessuna specifica

text

Testo semplice multilinea. Utilizzalo per descrizioni, estratti e testo semplice più lungo.

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

Opzioni di validazione:

  • minLength — Conteggio minimo di caratteri
  • maxLength — Conteggio massimo di caratteri

Opzioni widget:

  • rows — Numero di righe nella textarea (predefinito: 3)

slug

Identificatore sicuro per URL. Generato automaticamente da un altro campo o inserito manualmente.

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

Gli slug vengono automaticamente sanificati: minuscoli, spazi sostituiti con trattini, caratteri speciali rimossi.

Tipi Numerici

number

Numero decimale. Utilizzalo per prezzi, valutazioni e misurazioni.

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

Opzioni di validazione:

  • min — Valore minimo
  • max — Valore massimo

Memorizzato come SQLite REAL (virgola mobile a 64 bit).

integer

Numero intero. Utilizzalo per quantità, conteggi e valori di ordine.

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

Opzioni di validazione:

  • min — Valore minimo
  • max — Valore massimo

Memorizzato come SQLite INTEGER.

boolean

Vero o falso. Utilizzalo per interruttori e flag.

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

Memorizzato come SQLite INTEGER (0 o 1).

Data e Ora

datetime

Valore di data e ora. Memorizzato in formato ISO 8601.

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

Opzioni di validazione:

  • min — Data minima (stringa ISO)
  • max — Data massima (stringa ISO)

Formato di memorizzazione: 2025-01-24T12:00:00.000Z

Tipi di Selezione

select

Selezione singola da opzioni predefinite.

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

Opzioni di validazione:

  • options — Array di valori consentiti (obbligatorio)

Memorizzato come TEXT contenente il valore selezionato.

multiSelect

Selezioni multiple da opzioni predefinite.

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

Opzioni di validazione:

  • options — Array di valori consentiti (obbligatorio)

Memorizzato come array JSON: ["news", "tutorial"]

Contenuto Arricchito

portableText

Contenuto di testo arricchito utilizzando il formato Portable Text. Supporta intestazioni, elenchi, collegamenti, immagini e blocchi personalizzati.

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

Il valore viene memorizzato come array JSON di blocchi Portable Text, ad esempio:

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

I plugin possono aggiungere tipi di blocchi personalizzati (embed, widget, ecc.) all’editor. Questi appaiono nel menu dei comandi slash e vengono automaticamente renderizzati sul sito. Vedi componenti di rendering Portable Text.

Tipi Media

image

Riferimento a un’immagine caricata. Include metadati come dimensioni e testo alternativo.

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

Opzioni widget:

  • showPreview — Mostra anteprima immagine nell’admin (predefinito: true)

Il valore viene memorizzato come oggetto con il riferimento del media e i suoi metadati:

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

file

Riferimento a un file caricato come un documento o PDF.

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

Il valore viene memorizzato come oggetto con il riferimento del file e i suoi metadati:

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

Tipi Relazionali

reference

Riferimento a un’altra voce di contenuto.

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

Opzioni widget:

  • collection — Slug della collezione di destinazione (obbligatorio)
  • allowMultiple — Consenti riferimenti multipli (predefinito: false)

Un singolo riferimento viene memorizzato come ID della voce di destinazione:

"01HXK5MZSN..."

Riferimenti multipli vengono memorizzati come array di ID di voci:

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

Tipi Flessibili

json

Dati JSON arbitrari. Utilizzalo per strutture annidate complesse, integrazioni di terze parti o dati senza schema fisso.

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

Memorizzato così com’è nella colonna JSON SQLite.

Proprietà dei Campi

Tutti i campi supportano queste proprietà comuni:

ProprietàTipoDescrizione
slugstringIdentificatore unico (obbligatorio)
labelstringNome visualizzato (obbligatorio)
typeFieldTypeTipo di campo (obbligatorio)
requiredbooleanRichiedi un valore (predefinito: false)
uniquebooleanForza unicità (predefinito: false)
defaultValueunknownValore predefinito per nuove voci
validationobjectRegole di validazione specifiche del tipo
widgetstringOverride widget personalizzato
optionsobjectConfigurazione widget
sortOrdernumberOrdine di visualizzazione nell’admin

Slug di campo riservati

Questi slug sono riservati e non possono essere utilizzati:

  • 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

Tipi TypeScript

Importa le definizioni dei tipi di campo per l’uso programmatico:

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