Dati: Collections e sorgenti REST
Entrambi i tipi di sorgente dati li usi nel template allo stesso modo: data("slug").
9.1 Collections
Una Collection è una struttura dati propria con campi – ad es. Blog con titolo, data, immagine e testo.
Creare: Collections → + Nuova → nome e slug (lo slug è il nome per data("…")). Nella scheda Schema crei i campi:
| Tipo di campo | Inserimento | Nel template |
|---|---|---|
| Testo, Testo su più righe, URL | Campo di testo | {{ item.feld }} |
| Markdown | Editor Markdown con anteprima | {{ item.feld|markdown }} |
| HTML | Editor di codice | {{ item.feld|safe }} |
| Numero | Campo numerico | {{ item.feld }}, {{ item.feld|floatformat:2 }} |
| Sì/No | Casella di controllo | {% if item.feld %}…{% endif %} |
| Data | Campo data (salvato come AAAA-MM-GG) |
{{ item.feld }} |
| Scelta | Elenco di opzioni fisse | {{ item.feld }} |
| Immagine | Scelta dalla gestione file | {{ image(item.feld) }} |
| File | Scelta dalla gestione file | {{ file(item.feld).url }} |
| Collegamento (una voce) | Scelta di una voce di un’altra Collection | {{ item.feld.name }} |
| Collegamenti (più voci) | Aggiungere, rimuovere, ordinare voci | {% for x in item.feld %}{{ x.name }}{% endfor %} |
| Blocchi | Editor a moduli per blocchi fatti di moduli (vedi 7.6) | {% blocks item.feld %} |
Il nome del campo (ad es. titel) è il nome nel template, l’etichetta è ciò che compare nel modulo. Obbligatorio impone un valore.
Se rinomini un campo, le voci esistenti mantengono i vecchi valori solo fino al successivo salvataggio della voce. Pianifica perciò i nomi dei campi il prima possibile.
Lingua delle voci: Nello schema stabilisci in quale lingua sono le voci di una Collection. Solo allora le voci si possono collegare a voci di altre lingue – vedi Siti multilingue.
Collegamenti tra Collections: con i tipi di campo Collegamento e Collegamenti una voce punta a voci di un’altra (o della stessa) Collection. La Collection di destinazione la scegli nello schema accanto al tipo. Un articolo del blog ha così un autore (1:n), e articoli e tag possono essere associati tra loro in modo multiplo (n:m). Vengono salvati solo gli ID. In data() e item() i collegamenti sono già risolti:
{% for a in data("blog") %}
<h2>{{ a.titel }}</h2>
<p>von {{ a.autor.name }} · {% for t in a.tags %}#{{ t.name }} {% endfor %}</p>
{% endfor %}
All’inverso, cioè “tutti gli articoli di questo autore” o “tutti gli articoli con questo tag”, filtri l’altra Collection per ID. Con Collegamenti (più voci) il confronto significa “contiene”, con __ne “non contiene”:
{% for x in data("blog", "autor", autor.id) %}…{% endfor %}
{% for x in data("blog", "tags", tag.id, "sort", "-datum") %}…{% endfor %}
- Viene risolto un livello: i tag di un articolo sono voci complete, ma i loro collegamenti sono solo ID. Così i collegamenti reciproci non formano un ciclo. Un livello più in profondità ci arrivi con
data()e il filtro. - Le voci eliminate e, per i visitatori, quelle non pubblicate vengono omesse. Un Collegamento è allora vuoto, e i Collegamenti contengono solo le voci rimanenti. Nell’anteprima le bozze sono incluse.
- Nella scheda Utilizzo trovi esempi adatti, anche per la direzione inversa (“Collegata da”). Il pannello Dati del template nell’editor delle pagine mostra le voci risolte.
- L’API REST (
/collections/…/items) restituisce gli ID.GET /data/{slug}restituisce lo stesso didata()nel template, cioè risolto. - CSV: l’esportazione scrive gli ID (più ID separati da virgola). L’importazione accetta ID o il valore di un campo di testo della voce di destinazione, preferibilmente lo slug. Così funzionano le esportazioni di Webflow, che emettono i collegamenti come slug. Più valori li separi con virgola o punto e virgola; ciò che è sconosciuto viene segnalato come avviso.
Cartelle: nella scheda Schema puoi assegnare a una Collection una Cartella, ad es. il nome di un progetto. L’elenco a sinistra si raggruppa di conseguenza, e ogni cartella si può comprimere. Le cartelle servono solo per la panoramica e non cambiano nulla in data("…"). Snippets e file CSS/JS hanno lo stesso campo accanto al nome.
Le voci le gestisci nella scheda Voci: + Voce, modifica con un doppio clic o con Modifica, ordine con le frecce, Pubblicato per ogni voce. Le voci non pubblicate compaiono solo nell’anteprima.
Nella scheda Utilizzo la Collection mostra esempi pronti per template e API. Con Leggibile pubblicamente tramite l’API REST i client JavaScript possono recuperare le voci pubblicate senza accesso – anche da altri domini (CORS viene allora abilitato automaticamente).
Importazione ed esportazione CSV: nella scheda Voci, Esporta CSV scarica tutte le voci (bozze incluse) come file CSV – colonne id, published e poi i campi; UTF-8 con BOM, così Excel mostra correttamente i caratteri accentati. Importa CSV accetta un file CSV (UTF-8; vengono riconosciuti come separatori virgola, punto e virgola o tabulazione) e ne associa le colonne ai campi – automaticamente per nome del campo o etichetta, modificabile per ogni colonna. Un’anteprima mostra le prime voci così come verranno salvate ed elenca tutti gli errori con riga e colonna; finché ci sono errori, non viene importato nulla. Si importa tutto o niente, le nuove voci vengono aggiunte in fondo; Sostituisci le voci esistenti elimina prima tutte quelle presenti.
-
Abbinamento invece di aggiunta: in Abbinamento scegli un campo con valori univoci, di solito lo slug. Se esiste già una voce con lo stesso valore, viene aggiornata – solo le colonne associate, tutto il resto (anche lo stato, se non è associata una colonna di stato) resta; altrimenti ne viene creata una nuova. Con Elimina le voci non presenti nel file diventa una sincronizzazione completa: le voci mantengono il loro ID, sparisce solo ciò che manca nel file. L’anteprima mostra per ogni riga nuovo o modifica #ID e in alto il risultato (ad es. “1 nuove · 2 aggiornate · 1 eliminate”). Valori doppi nel file o nella Collection sono errori.
-
Modificare in Excel: esporta, modifica il file (cambia righe, aggiungi nuove righe con
idvuoto, cancella righe) e reimportalo – la colonnaidviene riconosciuta automaticamente come ID voce e proposta come abbinamento. Un ID sconosciuto è un errore. Usa per questo un’esportazione recente: se viene eliminata la voce più recente, una creata in seguito può riceverne l’ID. -
Nuova Collection da CSV: Collections → CSV (accanto a + Nuova). IllusionCMS propone nome, slug e per ogni colonna nome del campo e tipo (Numero, Sì/No, Data, URL, HTML, Testo …) – tutto modificabile prima dell’importazione, le colonne si possono ignorare.
-
Esportazioni di Webflow: le colonne di gestione (Collection ID, Item ID, Created On …) vengono ignorate, Draft e Archived determinano lo stato (true = bozza). Per altri file puoi usare tu stesso una colonna con sì/no come Stato: online o Stato: bozza; senza una colonna di questo tipo tutte le voci sono pubblicate.
-
Valori: i numeri possono essere scritti alla tedesca (
1.234,50) o all’inglese (1,234.50) –1,5vale 1,5. Sì/No comprendeja/nein,true/false,1/0,x. Le date vengono convertite inAAAA-MM-GGda2025-10-02,02.10.2025, timestamp ISO e dal formato di Webflow. I valori con zero iniziale (codici postali) l’importazione li propone come testo, non come numero. -
Immagini e file: una colonna immagine o file contiene o l’ID di un file o l’indirizzo di un file già ripreso tramite l’importazione di siti web – così gli URL delle immagini di un’esportazione Webflow trovano le immagini importate. Gli altri indirizzi restano vuoti (l’anteprima li mostra come avviso); se vuoi conservare l’indirizzo, usa il tipo URL.
-
L’importazione non attiva eventi dei Workflows – con mille righe sarebbero altrimenti mille esecuzioni di Workflow (ad es. notifiche).
Dati live: alcune Collections si riempiono da sole sul server live – ad es. richieste di contatto da un Workflow. Se nello schema spunti Dati live, le loro voci restano sulla destinazione quando carichi un bundle dal locale; le voci di prova della tua istanza locale non vengono trasferite. Lo schema (campi, nome) arriva comunque dalla versione locale. Nell’elenco tali Collections portano il badge Live.
Singleton: per le cose che esistono esattamente una volta – impostazioni del sito, codici colore, dati di contatto, orari di apertura – spunta Singleton nello schema. La Collection contiene allora esattamente una voce; invece di un elenco vedi subito il modulo in Contenuto. Nel template data() restituisce la voce direttamente come oggetto:
{% set s = data("einstellungen") %}
<header style="--primaer: {{ s.primaerfarbe }}">{{ s.firmenname }} · {{ s.telefon }}</header>
Anche l’API (GET /api/v1/collections/einstellungen/items, /api/v1/data/einstellungen) restituisce un oggetto; lo si modifica con PUT /api/v1/collections/einstellungen/item. Una seconda voce non è possibile, e nemmeno un’importazione CSV. Si può attivare o disattivare solo finché la Collection ha al massimo una voce.
Pagina di dettaglio e anteprima: se le voci compaiono su una pagina Catch-All (ad es. /blog/<slug>), selezionala nello schema in Pagina di dettaglio insieme al campo con la parte dell’URL (di solito slug). Quando modifichi una voce, a destra compare allora l’anteprima di questa pagina – con la versione non ancora salvata, quindi dal vivo mentre digiti, commutabile tra Desktop/Tablet/Mobile; Apri ↗ mostra la voce salvata sul sito.
9.2 data() e item()
{% for post in data("blog") %}…{% endfor %}
I parametri seguono come coppie di nome e valore:
| Parametro | Effetto | Esempio |
|---|---|---|
sort |
Ordina, - = decrescente |
data("blog", "sort", "-datum") |
limit |
Al massimo n voci | data("blog", "limit", 3) |
offset |
Salta le prime n | data("blog", "offset", 10, "limit", 10) |
| qualsiasi campo | Filtra per uguaglianza | data("produkte", "kategorie", "schuhe") |
feld__gt, __gte, __lt, __lte |
Maggiore / maggiore o uguale / minore / minore o uguale. I numeri vengono confrontati come numeri, i campi data (AAAA-MM-GG) in ordine cronologico; le voci senza valore vengono escluse |
data("events", "datum__gte", today) |
feld__ne |
Diverso | data("blog", "kategorie__ne", "intern") |
In più ci sono i campi id, _created e _updated (tempo Unix) – ad es. "sort", "-_created" per “prima i più recenti”. Anche i valori da variabili funzionano: data("produkte", "kategorie", route.query.kat).
Una singola voce la trovi con item():
{% with p=item("produkte", "slug", "sneaker-weiss") %}{{ p.name }}{% endwith %}
9.3 Sorgenti REST
Le sorgenti REST collegano qualsiasi API JSON – shop, CRM, sistema di ticketing, headless CMS, servizi propri. Il CMS richiama l’API durante il rendering, estrae la lista e memorizza il risultato per un po’.
Creare: Sorgenti REST → + Nuova:
| Campo | Significato |
|---|---|
| Nome / Slug | Lo slug è il nome per data("…") |
| Metodo / URL | GET o POST, URL http(s) assoluto |
| Header | ad es. Authorization: Bearer … |
| Body | JSON con POST |
| Percorso della lista | Dove si trova la lista nella risposta, ad es. data.items (vuoto = risposta intera) |
| Cache | Per quanto tempo il risultato viene riutilizzato (secondi, 0 = mai) |
| Timeout | Tempo di attesa massimo (1–60 secondi) |
I segnaposto rendono flessibili le richieste:
{name}in URL, body o header viene compilato dal template: URLhttps://shop.example.com/api/products?cat={kat}→data("produkte", "kat", "schuhe").{env.NAME}legge una variabile d’ambiente del server. Così le credenziali non finiscono nel database: headerAuthorization: Bearer {env.SHOP_TOKEN}, server avviato conSHOP_TOKEN=… ./illusioncms.
Testare: a destra Prova richiesta mostra stato, durata e dati. In Liste nel risultato compaiono tutti i punti in cui la risposta contiene liste – un clic ne riprende il percorso. Sotto c’è un esempio di template pronto con i campi trovati.
Buono a sapersi:
- Se una richiesta non riesce (stato di errore, timeout, JSON non valido), la pagina non può essere renderizzata. Se hai effettuato l’accesso vedi la causa esatta.
- Una pagina con dati REST resta nella cache delle pagine al massimo per la durata di cache della sorgente.
- Chi può creare sorgenti REST può far richiamare al server indirizzi arbitrari – anche nella rete interna.