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:
| Tipo | Colonna SQLite | Descrizione |
|---|---|---|
string | TEXT | Input di testo breve |
text | TEXT | Testo multilinea |
url | TEXT | Valore URL |
number | REAL | Numero decimale |
integer | INTEGER | Numero intero |
boolean | INTEGER | Vero/falso |
datetime | TEXT | Data e ora |
select | TEXT | Scelta singola da opzioni |
multiSelect | JSON | Scelte multiple |
portableText | JSON | Contenuto di testo arricchito |
image | TEXT | Riferimento immagine |
file | TEXT | Riferimento file |
reference | TEXT | Riferimento a un’altra voce |
json | JSON | Dati JSON arbitrari |
slug | TEXT | Identificatore sicuro per URL |
repeater | JSON | Gruppo 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 caratterimaxLength— Conteggio massimo di caratteripattern— 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 caratterimaxLength— 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 minimomax— 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 minimomax— 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à | Tipo | Descrizione |
|---|---|---|
slug | string | Identificatore unico (obbligatorio) |
label | string | Nome visualizzato (obbligatorio) |
type | FieldType | Tipo di campo (obbligatorio) |
required | boolean | Richiedi un valore (predefinito: false) |
unique | boolean | Forza unicità (predefinito: false) |
defaultValue | unknown | Valore predefinito per nuove voci |
validation | object | Regole di validazione specifiche del tipo |
widget | string | Override widget personalizzato |
options | object | Configurazione widget |
sortOrder | number | Ordine di visualizzazione nell’admin |
Slug di campo riservati
Questi slug sono riservati e non possono essere utilizzati:
idslugstatusauthor_idprimary_byline_idcreated_atupdated_atpublished_atscheduled_atdeleted_atversionlive_revision_iddraft_revision_idtermsbylinesbyline
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",
];