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, nella costruzione della app conviene partire dai dati che deve gestire. Non considerando i dati relativi agli Utenti, per i quali c'è un tipo apposito di Entità (gli Utenti, appunto), per tutti gli altri dati la prima ipotesi è quella di gestirli con diversi Tipi di Contenuto. 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" (la richiesta di prestito di un oggetto da parte di un vicino), "Concessione" (la concessione di prestito da parte del proprietario dell'oggetto), "Nota" (una nota a corredo di una Richiesta, scritta dal richiedente o dal proprietario), "Consegna" (la ricevuta di avvenuta consegna dell'Oggetto), "Valutazione" (la valutazione finale sull'esperienza di prestito), "Luogo" (un luogo aperto al pubblico dove può avvenire lo scambio degli oggetti) e "Abilitazione" (l'abilitazione di un operatore ad agire in un Luogo); non serve "Amico" perché le persone cui prestare gli Oggetti sono Utenti della app.
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 singoli 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 appunto rappresentato da due Tipi di Contenuto, uno scritto dall'Utente che chiede in prestito l'Oggetto ("Richiesta") e l'altro è scritto dall'Utente proprietario dell'Oggetto richiesto ("Concessionario"). Richiesta e Concessione sono collegati dal Campo di tipo riferimento della Concessione, che richiama la Richiesta cui la Concessione risponde.
Creare un nuovo Tipo di Contenuto
Ecco come Amministratore puoi creare 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 | Scegli l'etichetta per il Campo Titolo. Disattiva Sempre in cima agli elenchi (opzione che ha 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 successiva pagina 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. |
Titoli automatici
Il Campo Titolo è presente ed obbligatorio per tutti i Contenuti e serve di solito per identificare visivamente il Contenuto stesso.
In alcuni casi l'uso del campo Titolo è intuitivo: ad esempio, nella app "Miei Libri" il Campo Titolo di un Libro è usato proprio per memorizzare il suo titolo scritto in copertina. In altri casi, non è intuitivo cosa scrivere nel Titolo: ad esempio, per le Richieste della app "Prestiti tra vicini" conviene riportare informazioni già presenti negli altri Campi (es. "Richiesta di Carlo Rossi per la Falciatrice XYZ di Elena Verdi") oppure limitarsi ad un semplice "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, per istruire Drupal a riempire automaticamente il Titolo di un Tipo di Contenuto:
| 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. |
Con la stessa modalità è possibile compilare automaticamente Titolo più ricchi: ad esempio si potrebbe generare il Titolo "Richiesta n. X di Y" dove Y è il nome dell'Utente richiedente, semplicemente cercando e selezionando nell'esempio precedente il Token [node:author]. 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é "nascosti" trascinandoli sotto Disattivati, perché altrimenti cessano di funzionare. Il Campo non viene comunque mostrato all'Utente. |
Riusare i Campi
In una app possono servono decine di Campi. Per ridurne la proliferazione, è possibile "riciclare" un Campo su più Tipi di Contenuto. 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 evoluzione 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. |
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 impedire il funzionamento di una Vista: 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 invece che un Campo numerico intero serve un Campo numerico con virgola, oppure che risulta più semplice gestire un Campo di tipo data come un Campo testo, devi sapere 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 idati.
