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 gestire in Drupal un qualsiasi Contenuto, è necessario definirne il tipo: il Tipo di Contenuto fa da modello o "stampo" per la creazione di Contenuti di quel tipo. Il Tipo di Contenuto elenca i Campi che formano il Contenuto, stabilisce come mostrarli, quali Utenti possono inserire Contenuti di quel tipo ecc.
Appena installato, Drupal offre di default un paio di Tipi di contenuto molto semplici - la "pagina" e l'"articolo" - pensati più per i siti informativi che per una app.
Quali Tipi di Contenuti servono
La costruzione di una app in Drupal parte proprio dalla identificazione dei Tipi di Contenuto che servono alla app. Per scoprire i Tipi di Contenuto che ci servono, occorre esaminare non solo gli oggetti fisici (documenti, luoghi ecc.) che la app deve gestire, ma considerare anche "oggetti" più astratti, come procedure, progetti, gruppi di lavoro ecc. Ecco alcuni criteri di massima e di buono senso che possono aiutare nella identificazione dei Tipi di Contenuto utili alla nostra app.
Criterio della semplicità. Più Tipi di Contenuto definiamo, più la costruzione della app si complica. Se ci accorgiamo che due Tipi di Contenuti apparentemente distinti hanno in realtà gli stessi Campi o quasi, conviene fare un supplemento di analisi per capire se possiamo gestire entrambi con un solo Tipo di Contenuto, eventualmente prevedendo che uno o più Campi non siano sempre utilizzati.
Criterio dell'unità. Come le Entità (di cui sono un caso particolare), anche un Contenuto è gestito come un'unità, pertanto i Permessi assegnati ad un Utente valgono per tutti i Campi del Contenuto. Se per un Tipo di Contenuto ci accorgiamo che alcuni Campi sono gestiti da un gruppo di Utenti e gli altri Campi da altri, per consentire ad ognuno di intervenire autonomamente sui Campi di propria pertinenza, la soluzione più semplice è quella di creare un Tipo di Contenuto distinto per ogni gruppo di Utenti e di collegare questi Tipi di Contenuto tra loro mediante Campi Riferimento.
Criterio del tempo. Per lo stesso motivo, mentre è possibile (con qualche sforzo, come vedremo) modificare nel tempo i Permessi degli Utenti su un Tipo di Contenuto, non è possibile modificare nel tempo i Permessi sui singoli Campi. Quindi se alcuni Campi di un Tipo Contenuto sono sempre modificabili ed altri non devono essere modificabili prima di una certa data o di un certo evento, la soluzione più semplice è spostare questi ultimi in un Tipo di Contenuto a parte, per il quale i Permessi cambiano nel tempo.
Ad esempio, nella app "Vicinato" per rappresentare l'Attrezzo, la Categoria, la Sede, l'Abilitazione, la Richiesta, la Consegna, la Nota e la Valutazione creiamo gli omonimi Tipi di Contenuto.
Come costruire un nuovo Tipo di Contenuto
Ecco come Amministratore puoi costruire un nuovo Tipo di Contenuto:
| 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. "Attrezzo") ed una breve descrizione |
| configura i Campi predefiniti del nuovo tipo di Contenuto | Digita il Titolo, cioè il nome del Campo testo che lo identifica visivamente. Disattiva Promosso alla prima pagina, opzione che lo colloca nella prima pagina del sito (poco utile nella costruzione di una app). Disattiva Sempre in cima agli elenchi, opzione che lo colloca in cima agli elenchi (come sopra). Disattiva Crea una nuova revisione, opzione che genera diverse Versioni del Contenuto (salvo che la app abbia 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 (da valutare se serve per la app). |
| aggiungi un Campo al nuovo tipo di Contenuto | Vai in Struttura - Tipi di contenuto e clicchiamo 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 seguente, 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 di media complessità, servono normalmente 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. |
Titoli automatici
Il Campo Titolo è presente ed obbligatorio per tutti i Contenuti, ma in alcuni caso non è molto significativo. Nella app di esempio, mentre il Campo Titolo di Attrezzi, Categoria, Sede è utile per identificare l'attrezzo stesso, per Richieste, Prestiti, Consegne, Valutazioni e Messaggi il Titolo non corrisponde ad una informazione significativa e ho scelto quindi di lasciarlo costruirei automaticamente da Drupal come il nome del Tipo di Contenuto seguito da un codice univoco, es. "Richiesta 253", Oltre a evitare all'Utente di doversi inventare un titolo non significativo, ciò consente all'Utente di identificare senza ambiguità il Contenuto, ad esempio nei Messaggi scambiati con gli altri Utenti.
Per automatizzare la compilazione del titolo usiamo 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. |
Questo è solo un esempio di titolo automatico, perché con la stessa modalità si possono creare titoli più ricchi di significato, ad esempio "Richiesta su NOMEATTREZZO di PROPRIETARIO". Per semplificare l'identificazione del Contenuto, conviene comporre titoli automatici diversi per ogni Contenuto. Poiché il Titolo di un Contenuto è di default mostrato nella pagina del Contenuto con un carattere più grande, suggerisco di non comporre titoli troppo lunghi.
| ATTENZIONE: Nella composizione di un titolo automatico non è possibile utilizzare l'identificativo del Contenuto (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 precedenti ho preferito 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 ci ripensi e decidi che un Campo non ti 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 una Vista o un'altra configurazione in cui è utilizzato. Se decidi di procedere lo stesso, la Vista o il Workflow non vengono cancellati ma vengono disabilitati, per consentirti di modificarle e rimetterle in linea senza quel Campo.
L'eliminazione di un Campo riusato ne comporta la scomparsa in 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 nascondendolo nelle pagine di inserimento, modifica e visualizzazione dell'Entità cui appartiene.
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 e molta attenzione. Quando mi è capitato di doverlo fare, ho scelto la 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.

