Cosa sono i Contenuti
I Contenuti sono il tipo di Entità più generico e quindi più utilizzato per gestire informazioni nelle app. Prima di poter caricare Contenuti devi descrivere il loro tipo: il Tipo di Contenuto fa da modello o "stampo" per la creazione di Contenuti di quel tipo; il Tipo di Contenuto infatti definisce quali Campi sono richiesti, stabilisce come mostrarli, quali Utenti possono inserire Contenuti di quel tipo ecc.
Appena installato, Drupal gestisce un paio di Tipi di contenuto molto semplici - la "pagina" e l'"articolo" - pensati più per i siti informativi che per una app e quindi non ne parlerò. Vediamo invece come creare i Tipi di Contenuto che servono alla tua app.
Quali Tipi di Contenuti mi servono?
Come suggerito, per iniziare a costruire la tua app conviene partire dalle Informazioni che deve gestire. Non considerare gli Utenti, perché per essi c'è un tipo di Entità predefinito, ma concentriamoci sugli oggetti fisici (es. attrezzi, documenti, stanze) o astratti (es. progetti, processi, categorie) che hai previsto per la tua app. Per ognuno di essi potresti creare un Tipo di Contenuto specializzato.
Ad esempio, per la app "Miei Libri" servono i Tipi di Contenuto "Libro" per rappresentare il libro prestato, "Amico" per rappresentare l'amico cui presto il libro e "Prestito" per rappresentare il prestito effettuato di un libro ad un amico.
Per la app "Prestiti tra Vicini", più complessa della precedente, servono più Tipi di Contenuto: "Oggetto" (l'oggetto prestato), "Ambito" (l'ambito di utilizzo dell'Oggetto.es "giardino"), "Richiesta" e "Concessione" (le due parti di un prestito), "Messaggio" (un messaggio scambiato tra chi chiede in prestito e il proprietario dell'Oggetto), "Consegna" (la ricevuta di avvenuta consegna dell'Oggetto), "Valutazione" (la valutazione finale sull'esperienza di prestito), "Sede" (una sede pubblica in cui può avvenire lo scambio degli Oggetti) e "Abilitazione" (l'abilitazione di un utente ad agire in una Sede); non serve "Amico" perché le persone cui prestare gli Oggetti sono Utenti della app e quindi c'è una Entità per rappresentarli.
Ovviamente più Tipi di Contenuto crei, più la costruzione della app si complica: se ti accorgi che due Tipi di Contenuti hanno gli stessi Campi o quasi, ti conviene fare un supplemento di analisi per capire se puoi gestire entrambi con un solo Tipo di Contenuto, eventualmente prevedendo che qualche Campo non sia sempre utilizzato.
Viceversa, se Utenti diversi modificano Campi diversi dello stesso Tipo di Contenuto, poiché i Permessi di un Utente si applicano all'intero Contenuto e non ai suoi Campi, per consentire ad ogni Utente di modificare solo i Campi cui ha diritto, spesso la soluzione più semplice è dividere il Tipo di Contenuto in due Tipi collegati tra loro da un Campo riferimento. Ad esempio, nella app "Prestiti tra vicini" il "prestito" viene rappresentato da due Tipi di Contenuto, uno dei quali (la 'Richiesta") è scritto dall'Utente che chiede in prestito l'Oggetto e l'altro (la "Concessione") è scritto dall'Utente proprietario dell'Oggetto richiesto; la Concessione contiene un Campo riferimento che rimanda alla Richiesta che l'ha suscitata.
Costruire un nuovo Tipo di Contenuto
Ecco come Amministratore puoi costruire un nuovo Tipo di Contenuto ed aggiungervi i Campi che lo contraddistinguono:
| crea il nuovo Tipo di Contenuto | Vai in Struttura - Tipi di contenuto - Aggiungi un tipo di contenuto, digita il nome per il nuovo Tipo (es. "Oggetto") ed una breve descrizione |
| configura i Campi predefiniti | Digita il Titolo, cioè il nome del Campo testo che lo identifica visivamente. Disattiva Sempre in cima agli elenchi (opzione che avrebbe senso nella costruzione di un sito informativo). Disattiva Crea una nuova revisione (opzione che genera diverse versioni del Contenuto, utile solo se la app ha una specifica necessità di tener traccia delle modifiche apportate ad un Contenuto). Disattiva Visualizzare informazioni sull'autore e sulla data, (opzione che mostra Autore e data di pubblicazione del Contenuto che visualizzeremo in modo controllato con le Viste). |
| aggiungi un Campo | Vai in Struttura - Tipi di contenuto e clicca Gestione campi a fianco del Tipo di Contenuto. Clicca Create new field. Seleziona uno dei tipi di Campo tra quelli proposti. |
| configura il Campo | nella pagina successiva di configurazione, digita l'etichetta con cui il Campo deve essere mostrato all'Utente, specifica se la compilazione del Campo è obbligatoria e quanti valori il Campo può accettare. Ad esempio, un singolo Campo "Allegati" di tipo File può accettare più documenti, senza necessità di definire più campi "Allegato 1", "Allegato 2" ecc. |
Riusare i Campi
In una app non banale servono facilmente decine di Campi. Per ridurne la proliferazione, è possibile "riciclare" un Campo su più Tipi di Contenuto (e anche su altri tipi di Entità). Definito il Campo la prima volta in un Tipo di Contenuto, per riusarlo in un altro Tipo di Contenuto non cliccare Create new field ma clicca Riutilizzare un campo esistente e seleziona il Campo che intendi riusare.
| ATTENZIONE: Il riuso di Campi è raccomandabile solo se è probabile che non eliminerai quel Campo in una futura revisione della app, perché l'eliminazione di un Campo da un tipo di Entità ha conseguenze anche sulle altre Entità che lo usano. Ecco perché tendo a riusare pochi Campi. |
Titoli automatici
Il Campo Titolo è presente ed obbligatorio per tutti i Contenuti e serve di solito per identificare visivamente il Contenuto stesso.
Spesso l'uso del campo Titolo è intuitivo: ad esempio, nella app "Miei Libri" il Titolo di un Libro è proprio il suo titolo scritto in copertina. In altri casi no: ad esempio, nella stessa app il Titolo di una Richiesta potrebbe essere una frase del tipo "Richiesta di Carlo Rossi per la Falciatrice XYZ di Elena Verdi" oppure semplicemente "Richiesta n. X" rinviando alla lettura dei Campi per sapere di cosa si tratta. In questi casi, può essere comodo lasciare a Drupal la compilazione automatica del Titolo
Per automatizzare la compilazione del titolo servono i moduli aggiuntivi "Automatic Entity Label, "Token" e "Serial". Installati ed attivati questi moduli:
| aggiungi al Tipo di Contenuto un Campo di tipo "Numero Seriale" | in Struttura - Tipi di Contenuto seleziona Gestisci campi a fianco del Tipo di Contenuto di cui vuoi automatizzare i titoli ed aggiungi un Campo di tipo Numero Seriale |
| attiva la compilazione automatica del Titolo | in Struttura - Tipi di Contenuto seleziona Modifica a fianco del Tipo di Contenuto e clicca Automatic label |
| nascondi il titolo all'Utente quando modifica l'Entità | seleziona Automatically generate the label and hide the label field |
| definisci come comporre il Titolo | in Pattern for the label componi lo schema per la generazione dei titoli, utilizzando sia testo fisso (es. "Richiesta n.") sia i Token che recuperano i valori degli altri Campi del Contenuto: per vedere i Token disponibili, clicca Sfoglia i token disponibili e ti appare la gerarchia dei Token; in essa naviga in Nodi fino a trovare il Campo che vuoi sia riprodotto nel Titolo. |
Poiché il Titolo di un Contenuto è mostrato nella pagina del Contenuto stesso con un carattere grande, suggerisco di non comporre titoli automatici troppo lunghi.
| ATTENZIONE: Nella composizione di un titolo automatico non è possibile utilizzare l'identificativo del Contenuto (messo a disposizione dal Token [node:nid]) perché, nel momento in cui si sta creando il nuovo Contenuto, quel valore non è stato ancora assegnato da Drupal. Ecco perché negli esempi preferisco basare il titolo su un Campo Numero Seriale. I Campi di questo tipo non devono essere riusati né devono essere "nascosti" trascinandoli sotto Disattivati, perché altrimenti cessano di funzionare. Il Campo non viene comunque mostrato all'Utente. |
Eliminare un Campo
Se un Campo non serve più, puoi eliminarlo. Drupal potrebbe avvisarti che l'eliminazione di quel Campo pregiudica il funzionamento di qualche parte della tua app, ad esempio potrebbe pregiudicare il funzionamento di una Vista o un'altra configurazione che lo utilizza. Se decidi di procedere lo stesso, la Vista non viene cancellata ma disabilitata, per consentirti di modificarla e rimetterla in linea senza quel Campo.
L'eliminazione di un Campo riusato ne comporta la scomparsa da tutti i tipi di Entità in cui è stata usato.
Se l'eliminazione di un Campo comporta troppo lavoro di sistemazione, potresti decidere di mantenerlo, limitandoti a nasconderlo all'Utente.
Cambiare il tipo di un Campo
Se hai scoperto che un Campo numerico intero ti serve invece con numerico con la virgola, oppure che ti risulta più semplice gestire un Campo di tipo data come un Campo testo, sappi che in Drupal non c'è un meccanismo per cambiarne il tipo salvando i dati già inseriti. Ci sono moduli sperimentali che promettono di farlo, ma contengono sempre avvertenze. I più esperti propongono interventi diretti sul database, che richiedono competenze informatiche e molta attenzione. Quando mi è capitato di doverlo fare, ho scelto questa strada più lunga, ma più sicura:
- esportare in un file l'identificativo dell'Entità ed il valore del Campo, utilizzando il modulo Views Data Export
- aggiungere alle Entità un nuovo Campo del tipo desiderato
- importare dal file i valori nel nuovo Campo, utilizzando il modulo Feeds
- eliminare il Campo iniziale
Esamineremo qualche dettaglio di questa tecnica quando parleremo di importazione ed esportazione di informazioni.
