Guida completa

  • Crea le tue app con MieApp

    A cosa mi serve MieApp ?

    "Mi servirebbe una app per gestire le richieste dei miei clienti | le iscrizioni alla mia associazione | i miei dischi in vinile | qualunque altra cosa" MA "non so programmare | chissà quanto costa farla fare | non so a chi chiedere | come faccio a spiegare cosa voglio".

    MieApp è qui per aiutarti a dare una risposta a queste tue esigenze, mettendoti in mano uno strumento per creare le tue app, anche se non sai programmare. Con MieApp imparerai a descrivere cosa vuoi e farlo da te, senza bisogno di rivolgerti ad un programmatore e senza spendere soldi in licenze. Le app che realizzerai saranno tue e solo tue e potrai farle usare da colleghi ed amici su pc, tablet e smartphone. Anche MieApp è gratis, non devi neppure iscriverti e lasciare i tuoi dati. 

    Tutto ciò è reso possibile da Drupal, una piattaforma software open source e gratuita, disponibile in italiano, che mette a disposizione migliaia di funzioni per coprire tutte le tue esigenze. MieApp ti guiderà passo passo a conoscere Drupal, dalla descrizione di cosa vuoi dalla tua app fino al suo rilascio. MieApp è organizzato in brevi Guide, che ti consiglio di leggere nell'ordine in cui sono presentate ma, in base alle tue competenze ed alle tue esigenze, puoi decidere di saltarne qualcuna e tornare indietro. 

    A cosa non mi serve MieApp?

    Prima di proseguire, ecco alcuni avvisi sui limiti di MieApp

    • MieApp è un tutorial pensato per accompagnarti ad usare Drupal subito, imparando quel che serve e senza doverti preoccupare della sua complessità. Il resto lo scoprirai da te, a mano a mano che ne avrai bisogno. Inoltre contiene una serie di piccoli trucchi ed avvertenze che nascono dalla mio personale utilizzo di Drupal in ambito lavorativo. Se invece preferisci un approccio più strutturato, puoi far riferimento alla guida ufficiale di Drupal per utenti (Drupal User Guide) o a una delle numerose pubblicazioni in italiano.
    • MieApp è pensato per chi vuole usare Drupal per costruire applicazioni senza scrivere codice, cioè per coloro che, nel gergo di Drupal sono chiamati "site builder". Non tratta invece di sviluppo di nuovi moduli, operazione che ovviamente richiede competenze di programmazione.
    • Anche se non è necessario saper programmare per costruire una app con Drupal, bisogna saper ragionare per modelli e processi ed è utile avere una formazione informatica generale: insomma, Drupal non è proprio per tutti tutti tutti, ma con MieApp provo a rendere più facile tutto questo.
    • (la più importante) MieApp è un work in progress, nel senso che le Guide vengono pubblicate a mano a mano che ho tempo, quindi all'inizio ne troverai poche e non sempre complete 😃​. E dove non ho tempo o voglia di approfondire metterò rimandi a risorse già disponibili in rete.
    • Perché Drupal

      Posso davvero realizzare app senza saper programmare?

      L'approccio "no code" (senza scrittura di codice software) è molto di moda. Se cerchi "no code platform" in internet puoi scoprire molti servizi on line che promettono di farti produrre app senza saper programmare, Alcune di esse generano app vere e proprie, installabili su smartphone da Apple Store o Play Store. Altre preparano web app, che vengono eseguite dal servizio, che quindi devi tener attivo non solo durante la creazione della app, ma anche per tutto il periodo di utilizzo della app. Con pochissime eccezioni, l'uso di questi servizi è a pagamento.

      Avvertenza: "no code" non significa "no work" (nessuna fatica). Anche se non dovrai programmare, creare una app richiede di analizzare il problema che si vuol risolvere con la app, modellare i dati ed i processi che servono per risolverlo. E qualunque piattaforma "no code" tu scelga, dovrai imparare ad usarla. 

      Quali sono i vantaggi di Drupal?

      Drupal nasce come una piattaforma software per creare siti aziendali e governativi, intranet, blog ecc., ma col tempo è evoluto a gestire dati, interrogazioni sui dati e processi automatizzati. Queste caratteristiche fanno di Drupal una piattaforma "no code" con cui creare web app senza scrivere codice.

      Rispetto ad altre piattaforme, Drupal presenta alcuni vantaggi interessanti:

      • è gratuito: per usare Drupal non si pagano licenze; puoi creare le tue app con Drupal e farle usare da un numero illimitato di utenti senza dover nulla a nessuno; se lo installi in cloud per condividere le tue app con utenti fuori dalla tua rete locale, l'unica spesa che dovrai sostenere è quella dell'hosting, in cui potrai ospitare più di una app a poche decine di euro all'anno;
      • è open source, supportato da una vasta comunità di sviluppatori che mette a disposizione gratuitamente migliaia di moduli aggiuntivi in grado di soddisfare (quasi) tutte le tue esigenze;
      • è continuamente aggiornato: esiste dal 2011 e viene periodicamente aggiornato (siamo alla versione 11), con frequenti rilasci minori per la sicurezza e la correzione di errori.
      • è supportato da una comunità di migliaia di sviluppatori ed utilizzatori, quindi quando incontri un problema molto spesso trovi anche la soluzione.  

      Sul sito Drupal ci sono DUE Drupal: CMS e Core. Quale devo guardare?

      Da qualche mese, sul sito Drupal sono presentati due filoni di Drupal. Semplificando al massimo: "Drupal CMS" è pensato per la creazione di siti internet "belli" e più "commerciali"; "Drupal Core" è invece pensato per la creazione di applicazioni. Poiché in realtà Drupal CMS è basato su Drupal Core, possiamo ad oggi ignorare questa differenziazione. Dato lo scopo di MieApp, ovviamente nelle Guide si fa riferimento a Drupal Core, quindi ti invito a guardare la parte del sito Drupal dedicata a Drupal Core, ignorando l'altra. 

    • Come usare MieApp

      Devo leggere tutte queste Guide?

      No. Sei libero di consultare le numerose Guide di MieApp nell'ordine che vuoi. Però ti raccomando - almeno all'inizio - di leggerle nell'ordine in cui sono presentate, perché ogni Guida dà per scontato che tu abbia letto quelle precedenti. Proseguendo nella lettura, scoprirai da te che ci sono approfondimenti che non ti interessano e che puoi saltare, almeno fino a quando non ti serviranno. MieApp vuole infatti farti usare subito Drupal, senza perdere troppo tempo con la teoria. Le sue Guide sono scritte per introdurti a Drupal partendo da zero e per complessità crescente. Se invece vuoi una introduzione più formale a Drupal, ti consiglio di consultare il sito di Drupal. 

      Come leggerle

      Comandi, nomi di campi e di sezioni, messaggi ed altri testi fissi mostrati in Drupal e negli altri software sono evidenziati in rosso.

      ATTENZIONE ! I riquadri con questa scritta contengono avvertenze importanti, da leggere con attenzione
      APPROFONDIMENTO I riquadri con questa scritta contengono approfondimenti che, se sei di fretta, puoi saltare ad una prima lettura
      ▶️ Digita questi comandi nel Terminale del computer o in cloud  

      Posso trasformare le Guide in un libro da leggere?

      Si. In fondo all'Indice che elenca le Guide clicca il comando Guida Completa per accedere alla pagina che contiene il testo di tutte le Guide e che puoi stampare in formato PDF coi comandi del web browser. 

      Il "vocabolario" di Drupal

      Come tutti i software, anche Drupal ha un suo vocabolario, cioè un elenco di termini con un significato preciso. MieApp ti introduce a questi termini a mano a mano che servono. La prima volta che un termine viene usato, ti viene spiegato brevemente cosa significa e, cliccandoci sopra, viene mostrata una pagina di approfondimento. Per distinguere questi termini dal linguaggio comune, vengono sempre presentati con la lettera maiuscola. Infine, puoi consultare il vocabolario Drupal di MieApp.

      Dove trovo un esempio di app costruita con Drupal?

      In tutte le Guide faccio riferimento allo stesso esempio di app. In pratica, seguendo le Guide potresti ricostruire la app di esempio. Ovviamente non è questo lo scopo di MieApp ma, partendo da quell'esempio, sei invitato a provare a costruire da subito la tua app: la app di esempio serve solo per esemplificare le istruzioni. A mano a mano che nelle Guide costruiremo la app di esempio, potrai vederla in azione, perché è online qui

      Quindi mi serve una installazione funzionante di Drupal?

      Si. Puoi limitarti a leggere le Guide per farti un'idea di Drupal. Ma lo scopo vero di MieApp è di guidarti a costruire le app che ti servono e a questo fine ti serve una installazione funzionante di Drupal. La Guida alla Installazione ti spiega come procurartela.

    • Installazione di Drupal

      Puoi installare Drupal su un tuo computer locale oppure in cloud presso un provider internet. Ecco qualche domanda per aiutarti a scegliere tra installazione locale e installazione in cloud:

      Ho qualche competenza sistemistica?

      Per installare Drupal localmente sul tuo computer devi prima trasformare il computer in un server, installandovi alcuni componenti normalmente non presenti o non attive: un web server, un database server ed un interprete del linguaggio PHP. Esistono diverse procedure guidate per farlo, più o meno complesse, ma tutte richiedono qualche competenza sistemistica. L'installazione in cloud è più semplice, perché il server lo predispone il provider. Un suggerimento: prova l'installazione locale per imparare ad usare Drupal e poi passa al cloud se non ne vieni a capo o quando è il momento di condividere la tua app con altri utenti via internet.

      Chi userà la mia app?

      Se la app sarà usata solo da persone connesse alla rete locale di casa tua o del tuo ufficio, può bastare l'installazione locale. Se invece la tua app sarà usata da persone che accedono da internet, allora devi installare Drupal in cloud (oppure "esporre" il tuo computer su internet, ma questo scenario esula dalle Guide di MieApp).

      Sono disposto a spendere qualcosa?

      L'installazione locale sul tuo computer non ti costa nulla, se non il tempo che perderai nell'allestimento. L'uso di Drupal in cloud di per sé costa zero, ma devi mettere in conto il costo di un abbonamento per l'uso del server del provider: un "web hosting" (la forma base e meno costosa del cloud) è sufficiente per partire e per la maggior parte delle tue app e costa poche decine di euro all'anno.

      Un rapido confronto....

      Le operazioni da eseguire nei due casi non sono esattamente le stesse ma il percorso è abbastanza simile (i dettagli li trovi nelle due Guide dedicate):

       Installazione localeInstallazione in cloud

      1

      Trasformare il computer in un serverScegliere il provider che offre il server adatto

      2

      Configurare il server(ci pensa il provider)

      3

      Preparare la cartella dove installare DrupalPreparare il sito dove installare Drupal
      Installazione manuale di Drupal nel sitoSe disponibile: Installazione automatica di Drupal nel sito

      4

      Preparare il database necessario a DrupalPreparare il database necessario a Drupal(ci pensa il provider)

      5

      Installare Drupal nella cartellaInstallare Drupal nel sito(ci pensa il provider)

      6

      Configurare Drupal per il primo usoConfigurare Drupal per il primo uso(ci pensa quasi interamente il provider) Configurare solo alcuni aspetti di Drupal 

      Ok, ho scelto di...

      • Installazione locale

        Leggi questa Guida se hai deciso di installare Drupal sul tuo computer locale, altrimenti passa alla Guida per installare Drupal in cloud.

        Per installare Drupal sul tuo computer locale, devi prima trasformarlo in un server e poi installarvi Drupal.

        Come trasformo il mio pc in un server?

        Per funzionare, Drupal richiede che sul computer siano presenti ed attivate i seguenti componenti software:

        • un web server (es. Apache), che cura le comunicazioni tra Drupal e il pc o smartphone dell'utente
        • un database server (es. MySQL o MariaDB), che gestisce il database in cui sono archiviate le informazioni necessarie a Drupal
        • un interprete di linguaggio PHP, che esegue il codice sorgente di Drupal, scritto appunto in PHP
        • composer, un tool che facilita l'installazione delle diverse librerie software di cui è composto Drupal

        Se sei sul posto di lavoro, ti consiglio di rivolgiti all'informatico aziendale, che provvederà all'installazione di tutti questi componenti, probabilmente su un computer Linux, facendo riferimento a queste istruzioni nell sito di Drupal.

        Se sei a casa o ti devi arrangiare con un computer Windows, la comunità Drupal raccomanda di usare DDEV, una procedura che installa e configura tutti i componenti necessari a Drupal. Semplificando un bel po', DDEV simula un server Linux sul tuo computer Windows. La procedura è guidata, ma richiede parecchie competenze sistemistiche e più di 250 GB di disco libero: per quest'ultimo motivo, non ho finora potuto provarla.

        Qualcosa di più semplice?

        Per computer Windows ci sono soluzioni più semplici e leggere di DDEV: anche se considerate meno stabili, sono ragionevolmente utilizzabili per app non troppo critiche. Queste soluzioni sono identificate con la sigla "WAMP" (dalle iniziali di Windows, Apache, MySQL/MariaDB e Php) e sono tutte dotate di una procedura di installazione semplificata. Dopo l'installazione, presentano tutte un pannello di controllo, attraverso cui configurare ed attivare i componenti software, ed un Terminale in cui digitare i comandi necessari all'installazione di Drupal. 

        Tra le soluzioni WAMP più utilizzate ci sono XAMPP, WAMPserver, WAMP.NET e Laragon. Io ho utilizzato XAMPP fino alla versione 10 di Drupal, ma attualmente (settembre 2025) non è possibile usarla con la versione 11 di Drupal, perché XAMPP installa una versione di PHP (8.2) inferiore a quella richiesta da Drupal (8.3). WAMP.NET non installa composer. WAMPserver la conosco poco. Con Laragon ho installato Drupal 11 in pochi minuti sul mio portatile e quindi te la consiglio. La versione gratuita di Laragon non si autoaggiorna e all'avvio mostra un invito a comprare una licenza, però è un disturbo sopportabile. Le istruzioni che seguono sono esemplificate su Laragon, ma sono abbastanza simili per tutte le soluzioni WAMP.

        Scaricato ed installato Laragon (o un'altra soluzione WAMP), occorre modificare la configurazione di Apache, MySQL e PHP per tener conto delle esigenze particolari di Drupal. In particolare:

        CONFIGURAZIONE PHP: nel file di configurazione php.ini occorre impostare i seguenti parametri:

        realpath_cache_size = 10M

        memory_limit = 4G

        In Laragon, si accede a php.ini col comando PHP - php.ini

        Occorre inoltre attivare le estensioni di PHP 

        gd (obbligatoria) 

        opcache (raccomandata). 

        In Laragon, per attivarle basta selezionarle dal menù PHP -  Estensioni 

        Ok, ho trasformato il pc in un server. Come installo Drupal?

        Una volta trasformato il pc in un server con tutti i componenti software sopra indicati, il pc è pronto ad ospitare Drupal.

        APPROFONDIMENTO  Per inciso, i componenti software che hai installato per Drupal sono gli stessi richiesti anche da altre applicazioni web based scritte in PHP, tra cui Nextcloud per la gestione di documenti, LimeSurvey per la gestione di questionari, Prestashop per avere un negozio online, Moodle per distribuire corsi di formazione, Mediawiki per creare siti informativi, osTicket per gestire richieste di assistenza, Kimai per valorizzare il tuo tempo lavorativo ecc. Accenno a queste opportunità perché, prima di imbarcarti a costruire da zero una app con Drupal, potresti verificare se la tua necessità può essere soddisfatta da una applicazione già disponibile. Per un elenco aggiornato di queste applicazioni cerca "open source php web based applications".

        Poiché sul tuo pc potresti voler ospitare più di una app costruite con Drupal, ti consiglio di fare una installazione separata di Drupal per ogni app, in modo che l'eventuale crash di una app non blocchi le altre. Inoltre questa scelta semplifica la futura migrazione delle singole app in cloud o su un altro server. Le istruzioni che seguono sono quindi da ripetere ogni volta che ti accingi a costruire una nuova app

        1. Prepara in Apache una cartella in cui installare Drupal
        2. Prepara in MySQL un database dedicato alla app
        3. Prepara in Apache un indirizzo specifico per la app
        4. Installa Drupal nella cartella
        5. Configura Drupal per il primo utilizzo

        Sono tanti passaggi, ma tutti abbastanza semplici (soprattutto con Laragon).

        1. PREPARA LA CARTELLA DOVE INSTALLARE DRUPAL

        Con l'aiuto del pannello di controllo della tua soluzione WAMP, identifica la cartella "base" in cui Apache memorizza le pagine da distribuire. Di solito si chiama www o htdocs. Trovata la cartella base, con Gestione Risorse di Windows crea in essa una sottocartella, dandole il nome della app (in minuscolo, senza spazi o caratteri speciali) che intendi costruire. Ad esempio, se la tua app si chiamerà "Gestione Prestiti", la sottocartella potrebbe chiamarsi "gestione-prestiti" o semplicemente "prestiti".

        In Laragon, usa il comando Creazione veloce - blank e digita il nome della app. Laragon provvede non solo a creare la sottocartella nel posto giusto, ma crea subito anche il database omonimo in MySQL e crea l'indirizzo specifico per la app, semplificando le istruzioni successive. 

        2.PREPARA IN MYSQL IL DATABASE DEDICATO ALLA APP

        Se stai usando Laragon, il database è già stato creato nel passaggio precedente: col comando Attrezzi - HeidiSQL entra in MySQL, seleziona il database col nome della app, clicca l'icona Utenti, crea un utente con lo stesso nome della app e con password a tua scelta ed attiva tutti i privilegi dell'utente.

        Con le altre soluzioni WAMP: dal pannello di controllo lancia la gestione di MySQL (di solito è phpmyadmin); entrato in MySQL, crea un nuovo utente dandogli il nome della app e con password a tua scelta, seleziona l'opzione per creare un database con lo stesso nome dell'utente ed attiva tutti i privilegi per quell'utente sul quel database.

        3.PREPARA IN APACHE L'INDIRIZZO DELLA APP

        Se stai usando Laragon, l'indirizzo è già stato creato nel primo passaggio ed è:

        https://NOMEAPP.test

        dove NOMEAPP è il nome che hai dato alla app. 

        Con altre soluzione WAMP: DA SCRIVERE.

        4.INSTALLA DRUPAL NELLA CARTELLA

        Se stai usando Laragon, lancia il Terminale col comando Laragon - Terminale. Con le altre soluzioni WAMP, dal pannello di controllo lancia il Terminale.

        Dentro il terminale, usando i comandi Windows cd e dir posizionati nella sottocartella della app e digita il comando:

        ▶️ composer create-project drupal/recommended-project .

        Non dimenticare il punto finale "." perché dice a composer di installare Drupal nella cartella corrente.

        ATTENZIONE ! Attualmente (settembre 2025) al termine della installazione dei file di Drupal da parte di composer, è necessario eseguire le seguenti istruzioni, per evitare un problema bloccante nel passaggio successivo, riscontrato da me e da altri, e che ha trovato una soluzione temporanea in questa pagina:

        • Da Gestione Risorse di Windows apri la artella della app;  con Laragon puoi usare il comando www - Esplora - NOMEAPP
        • Entra nella sottocartella web creata da composer ed apri il file .htaccess con un editor di testi (es. Notepad)
        • Nel file, modifica la riga php_value assert.active come # php_value assert.active per disabilitarne l'esecuzione
        • Salva il file.

        5.CONFIGURA DRUPAL PER IL PRIMO UTILIZZO

        Sul pc vai con un web browser sull'indirizzo della app aggiungendo web in fondo. Ad esempio, con Laragon è:

        https://NOMEAPP.test/web

        Nel web browser appare la procedura di prima configurazione di Drupal, in cui occorre specificare:

        •  la lingua ("italiano")
        • il tipo di installazione ("Standard")
        • i tre parametri del database (utente, password, nome database) che hai definito nel passaggio 2
        • l'indirizzo email del sito (la tua email)
        • il nome utente dell'Amministratore Drupal (tipicamente "admin")
        • la password dell'Amministratore (a tua scelta)
        • l'indirizzo email dell'Amministratore (la tua email)
        • il fuso orario ("Roma")
        • se attivare le notifiche di aggiornamento (attivale) 

        Ora Drupal è installato,  pronto all'uso e sei dentro Drupal come Amministratore. Prima di iniziare ad esplorare Drupal ti raccomando di installare anche l'utility Drush

      • Installazione in cloud

        Per installare Drupal in cloud, esegui questi passaggi:

        1. Scegli il provider
        2. Prepara presso il provider il sito che ospiterà Drupal
        3. Installa Drupal nel sito

        1. SCEGLI IL PROVIDER

        Per scegliere il provider cerca "drupal hosting" e seleziona un servizio cloud con queste caratteristiche:

        • per iniziare spendendo poco, è sufficiente un servizio del tipo "web hosting" o "condiviso", meno performante del noleggio di un server vero e proprio, ma molto meno costoso
        • il servizio deve includere Apache, Php, MySql o MariaDB, che sono i componenti software necessari a Drupal
        • In particolare, verifica che sia disponibile una versione PHP compatibile con quella richiesta Drupal (attualmente almeno PHP 8.3); per gli altri requisiti necessari vedi sul sito di Drupal
        • il servizio deve fornire un Terminale in cui poter dare comandi; presso alcuni provider, è chiamato "Shell" o "ssh"; il Terminale è essenziale per poter installare Drupal e i suoi moduli aggiuntivi
        • il servizio deve consentire di realizzare più "siti": per ogni app che vorrai costruire con Drupal ti serve un "sito" distinto, quindi più "siti" sono compresi nel servizio più app potrai realizzare con lo stesso abbonamento
        • preferisci un servizio che mette a disposizione una procedura per l'installazione automatica di Drupal: non è strettamente necessario, ma se c'è ti semplifica la vita; presso molti provider, a questo scopo viene fornita l'applicazione Softaculous
        • preferisci un servizio che mette a disposizione procedure di backup manuali o automatici, utilissime per ripristinare una app dopo un eventuale crash o hackeraggio.

        Tra le offerte disponibili (luglio 2025), segnalo a titolo di esempio IONOS OVHcloud Netsons Infomaniak e Hostinger. Personalmente da anni uso Netsons e Infomaniak.

        2. PREPARA IL SITO CHE OSPITERA' DRUPAL

        Quando attivi un web hosting in cloud, normalmente ti viene assegnato anche un dominio internet, condiviso o tuo personale. Ad esempio, io ho comprato il dominio "bottasini.eu". Per ogni app che intendi ospitare nel cloud, devi prima predisporre il "sito" che la ospiterà e in cui installerai Drupal. Le istruzioni variano da provider a provider, però la procedura di creazione dei siti è solitamente molto guidata. Alla creazione di un nuovo sito, ti viene chiesto se intendi dedicargli l'intero dominio (es. "bottasini.eu") oppure un sottodominio (es. "buonivicini.bottasini.eu"): scegli questa opzione se intendi ospitare più app evitando di acquistare un dominio diverso per ogni app. Devi infine specificare la versione di PHP che intendi usare nel sito: ricordati che deve essere uguale o superiore a quella richiesta da Drupal (attualmente PHP 8.3)

        3. INSTALLA DRUPAL NEL SITO

        Dal pannello di controllo del provider entra nel sito che hai appena creato.

        Se il provider ti mette a disposizione una procedura per l'installazione automatica di Drupal, usala: ti risparmierai una serie di attività. Ad esempio, col provider Infomaniak l'installazione di Drupal dentro un sito si presenta così:

        La procedura di installazione automatica di Drupal crea il database dove la app memorizzerà le informazioni, installa nel sito i file che compongono Drupal e lo configura per il primo utilizzo. La procedura ti chiede solo alcune informazioni base, tra cui la lingua ("italiano"), la username dell'Amministratore (di solito si sceglie "admin"), la password dell'Amministratore (a tua scelta), l'email dell'Amministratore e del sito (normalmente, la tua email). Al termine della procedura automatica, Drupal è pronto all'uso. Prima però ti raccomando di installare anche l'utility Drush

        Se il provider NON ti mette a disposizione una procedura per installare automaticamente Drupal nel sito, niente paura: ecco le istruzioni per installarlo manualmente. I passaggi sono questi:

        • 3.1 Prepara il database
        • 3.2 Installa Drupal nel sito
        • 3.3 Configura Drupal per il primo utilizzo

        3.1 Prepara il database 

        Drupal necessita di un database per memorizzarvi la propria configurazione e le informazioni gestite dalla app. Dal pannello di controllo del provider, lancia il gestore di database (solitamente si chiama phpmyadmin). Le istruzioni che seguono valgono dentro phpmyadmin, ma non cambiano molto se l'applicazione offerta dal provider è un'altra.

        • clicca Account utente e crea un nuovo utente
        • Scegli come nome utente il nome della app che stai costruendo, per facilitarti l'abbinamento tra database e app
        • Scegli una password non banale oppure chiedi di generarla automaticamente
        • Accendi le opzioni per la creazione di un database con lo stesso nome dell'utente e per dare all'utente tutti i privilegi sul nuovo database
        • Memorizza da qualche parte nome utente, password e nome del database, perché ti serviranno nell'ultimo passaggio
        • Clicca "Esegui"

        3.2 Installa i file di Drupal
        Dal pannello di controllo del provider lancia il Terminale . In esso, usa i comandi Linux, per trovare la cartella che ha lo stesso nome del sito ed entrarvi:

        • pwd (per sapere in che cartella sei)
        • ls (per elencare il contenuto della cartella)
        • cd (per spostarti di cartella)

        Alcuni provider collezionano tutte le cartelle dei siti sotto un'unica cartella, ad esempio /sites, in questo caso, per entrare nella casella del sito digita nel Terminale:

        ▶️ cd sites/NOMEAPP

        dove NOMEAPP è il nome che hai dato al sito. Sempre nel Terminale digita il comando:

        ▶️ composer create-project drupal/recommended-project .

        Il punto finale è importante perché dice a Composer di installare Drupal nella cartella corrente.

        3.3  Configurare Drupal per il primo utilizzo

        Al termine del precedente passaggio esci dal pannello di controllo del provider e lancia un web browser sul sito. Ad esempio, se hai creato il sito "buonivicini" nel dominio "bottasini.eu" lancia

        https://buonivicini.bottasini.eu

        Nel web browser appare la procedura di prima configurazione di Drupal, che chiede alcune informazioni per completare l'installazione, tra cui la lingua ("italiano"), la username dell'Amministratore (di solito si sceglie "admin"), la password dell'Amministratore (a tua scelta), l'email dell'Amministratore e del sito (normalmente, la tua email) e le tre informazioni definite al passo 3.2 (nome del database, nome dell'utente del database, password dell'utente del database).

        Ora Drupal è installato e pronto all'uso. Prima però ti raccomando di installare anche l'utility Drush.

      • Drush

        Cos'è Drush e a cosa mi serve?

        Drush è una utility molto importante, perché ti permette di modificare la configurazione di Drupal da Terminale anziché da web browser. Quindi permette di agire sulla tua app anche quando, per qualche motivo, Drupal non risponde più da web browser. Oltre a fare da "salvagente" delle tue app, Drush consente di eseguire diverse operazioni di manutenzione su Drupal. 

        Come installo drush?

        Apri il pannello di controllo del tuo provider (se sei in cloud) o della tua soluzione WAMP (se hai installato Drupal sul tuo computer locale), lancia il Terminale, entra nella cartella dove hai installato Drupal e digita il comando:

        ▶️ composer require drush/drush

        Come si usa drush?

        Una volta installato, verifica il funzionamento di Drush: apri il Terminale, entra nella cartella in cui hai installato Drupal e digita il comando:

        ▶️ vendor/bin/drush

        Se sei in una installazione locale su Windows e ottieni un errore, prova con

        ▶️ vendor\bin\drush

        I comandi che puoi dare a Drush sono elencati sul sito di drush. Qui sotto elenco quelli di uso più comune.

        SALVARE LA TUA APP CON DRUSH

        Se la tua app non risponde più nel web browser, puoi provare a recuperarla digitando il comando:

        ▶️ vendor/bin/drush cr

        Questo comando pulisce la Cache (memoria temporanea di Drupal): talvolta basta questa semplice operazione per risolvere un crash di Drupal.

        DISINSTALLARE UN MODULO

        Se la tua app non risponde più dopo che hai installato un modulo aggiuntivo, con Drush puoi disinstallare quel modulo riportando la app in una situazione probabilmente funzionante. Col comando:

        ▶️ vendor/bin/drush pm:list

        ottieni l'elenco di tutti i moduli installati. Identifica in esso l'esatto nome interno del modulo che vuoi disinstallare e poi digita il comando:

        ▶️ vendor/bin/drush pm:uninstall NOMEMODULO

        dove NOMEMODULO è il nome interno del modulo. che hai scoperto col comando precedente.

        SBLOCCARE CRON

        Se Cron non funziona più, puoi provare a sbloccarlo eseguendolo da Drush col comando:

        ▶️ vendor/bin/drush cron
      • Il Core di Drupal e i moduli aggiuntivi

        Moduli aggiuntivi? Perché dovrei aver bisogno di altri moduli ?

        Drupal è formato da un nucleo principale, detto Core e da moduli, ognuno dei quali aggiunge funzioni a Drupal. Ad esempio, la gestione di immagini e video è svolta dal modulo "Media". Quando installi Drupal, vengono installati il Core ed una ventina di moduli essenziali. Col comando Estendi del menù di Amministratore puoi vedere l'elenco di tutti i moduli presenti ed attivi. 

        E' molto probabile che la tua app richieda funzionalità non offerte dalla installazione base di Drupal., quali ad esempio la gestione di calendari, mappe, mail ecc. Uno dei punti di forza di Drupal è che la comunità degli sviluppatori mette gratuitamente a disposizione migliaia di moduli aggiuntivi, in grado di soddisfare (quasi) tutte le esigenze. Anzi, talvolta la medesima esigenza è risolta con strategie differenti da moduli diversi e, col tempo, alcuni moduli vengono abbandonati a favore di quelli preferiti dagli utilizzatori di Drupal.

        Dove trovo i moduli che mi servono?

        Puoi esplorare l'elenco dei moduli disponibili sul sito di Drupal alla pagina:

        https://www.drupal.org/project/project_module

        Nel seguito di MieApp evidenzierò i moduli di utilizzo più comune per la creazione di app. Qui puoi vedere l'elenco completo dei moduli utilizzati nelle diverse Guide di MieApp. Ogni volta che cito un modulo, viene proposta una pagina con una breve illustrazione di cosa fa, col link alla pagina del sito Drupal che contiene una descrizione completa, i requisiti e le istruzioni per installarlo ed gli eventuali problemi noti. 

        Come installo un modulo?

        Con l'attuale versione di Drupal (11) non è possibile installare un modulo da web browser ma occorre agire da Terminale. Una volta identificato sul sito di Drupal il modulo che ti serve, per installarlo:

        • Sul sito di Drupal vai nella pagina del modulo
        • In quella pagina, copia l'istruzione mostrata a fianco di Install. L'istruzione è formata dal comando composer require seguito da nome e versione del modulo. Ad esempio
        ▶️ composer require 'drupal/eva:^3.1' 
        • è l'istruzione per installare il modulo EVA versione 3.1. Se la pagina mostra più versioni disponibili, installa la versione più recente compatibile con la versione di Drupal che stai usando (attualmente Drupal 11). Se un modulo non ha una versione compatibile con la tua versione di Drupal, non puoi usarlo e devi cercarne uno diverso che faccia quel che ti serve. Se possibile, non installare moduli in versione "alpha" perché sono instabili.
        • Se hai trovato il modulo giusto ed hai copiato l'istruzione di installazione, passa al pannello di controllo del tuo provider cloud o della tua installazione locale, apri il Terminale, posizionati nella cartella dove hai installato Drupal ed incolla l'istruzione nel terminale.
        • Al termine dell'installazione, lancia un web browser sulla tua app, entra come Amministratore, seleziona Estendi nel menù ed attiva il modulo appena installato. In alcuni casi, l'installazione di un modulo trascina con sé l'installazione di altri moduli necessari al suo funzionamento.

        Ecco un video che mostra i passaggi per l'installazione di un modulo aggiuntivo, esemplificato sul provider Infomaniak:

        Quali moduli aggiuntivi mi suggerisci?

        La risposta dipende da cosa deve fare la tua app. Però ci sono moduli che, nella mia esperienza, mi ritrovo a installare praticamente sempre. Invece che elencarteli qui senza poter entrare nel merito, te li indicherò a mano a mano che servono nelle Guide che seguono. All'inizio di ogni Guida trovi elencati i moduli richiesti o consigliati in quella Guida. Ogni volta che citerò un modulo, cliccando su di esso potrai consultare una pagina con una breve spiegazione dello scopo del modulo stesso ed il link alla sua pagina nel sito Drupal, ad esempio vedi il modulo Token. Puoi anche consultare l'elenco completo dei moduli citati in MieApp.  

        Aiuto! Dopo l'installazione di un modulo la app non risponde più

        Se dopo l'installazione di un nuovo modulo la tua app non risponde più (caso raro, ma ahimè può succedere), disabilita il modulo con Drush come spiegata qui.

    • L'Amministratore di Drupal

      Chi è l'Amministratore?

      L'Amministratore di Drupal è l'Utente che hai creato durante l'installazione di Drupal, definendone la username (di solito "admin") e la password. L'Amministratore è il primo Utente di Drupal ed è identificato internamente col numero "1"

      L'Amministratore ha pieni poteri su Drupal e può cambiarne ogni aspetto, trasformando quindi Drupal nella app che desideri. 

      L'Amministratore agisce attraverso le pagine esposte da Drupal nel web browser. Come tutti gli altri Utenti, l'Amministratore entra in Drupal cliccando il comando Entra o Login nella prima pagina di Drupal. Se per qualche motivo questo comando non è visibile nella prima pagina, aggiungi "user" all'indirizzo della app per accedere alla pagina di login:

      https://NOMESITO/user

      Ho perso la password di Amministratore!

      Se hai perso la password di Amministratore, nella pagina di login clicca Reimposta la tua password: se la tua installazione di Drupal è in grado di spedire mail, ti arriverà un messaggio con un link che ti consente di impostare una nuova password. Se non funzionsa, da Terminale lancia Drush col comando:

      ▶️ vendor/bin/drush user:password admin 'NUOVAPASSWORD'

      al posto di NUOVAPASSWORD digita la nuova password

      Cosa può fare l'Amministratore in Drupal?

      La risposta breve è: tutto. Più precisamente, tutte le operazioni che possono essere eseguite dalle pagine esposte da Drupal. Sono quindi escluse le operazioni che richiedono comandi nel Terminale, tra cui l'aggiornamento del core di Drupal e l'installazione dei moduli aggiuntivi e la risoluzione di problemi

      Anche se l'Amministratore agisce attraverso le pagine esposte da Drupal come tutti gli altri Utenti, il modo in cui Drupal si presenta all'Amministratore è molto diverso da come lo vedono gli altri Utenti. Drupal infatti espone al solo Amministratore informazioni e comandi con cui configura come Drupal si presenta agli altri Utenti.

      Il principale strumento a disposizione dell'Amministratore è la barra di amministrazione, solitamente mostrata in alto. 

      Cliccando Gestisci si accede alle seguenti sezioni, che consentono di configurare Drupal per costruire la app che vogliamo:

      • Contenuto: aggiungere nuovi Contenuti alla app e di cercare e modificare quelli già inseriti.
      • Struttura: modificare la struttura delle informazioni gestite da Drupal e come vengono mostrate agli utenti.
      • Aspetto: cambiare colori, font, logo ed ogni aspetto grafico della tua app
      • E:stendi: attivare e disattivare i moduli aggiuntivi di Drupal che hai installato
      • Configurazione: cambiare il titolo della app mostrato agli utenti, scegliere la pagina inziale, selezionare il formato di data ed ora e la lingua, configurare l'editor visuale per l'inserimento dei testi, lanciare operazioni di manutenzione tra cui la pulizia della cache (comando Prestazioni), lanciare operazioni periodiche (comando Cron); se hai installato il modulo aggiuntivo ECA, puoi anche disegnare le automazioni della app
      • Persone: gestire gli Utenti della app e di attribuire loro permessi sui contenuti e sui comandi
      • Resoconti: ricevere una serie di informazioni sul funzionamento e sugli eventuali problemi di Drupal, suggerendo aggiornamenti dei moduli installati
      • Aiuto: ricevere un primo aiuto (piuttosto scarno) sull'uso di Drupal

      L'uso di queste sezioni è illustrato nelle Guide che seguono. I moduli aggiuntivi possono aggiungere ulteriori comandi nelle sezioni.

      Posso delegare ad altri il ruolo di Amministratore?

      L'Amministratore può condividere il proprio ruolo con altri Utenti fidati ed esperti nell'uso di Drupal, assegnando loro il ruolo di Amministratore, come spiegato in questa Guida

      L'Amministratore può anche delegare alcuni dei propri poteri ad Utenti non amministratori, installando e configurando specifici moduli aggiuntivi: ad esempio il modulo Role Delegation consente di delegare ad altri la sola gestione Utenti, mentre il modulo Delegate Permission consente di delegare singole funzioni di Amministratore.

    • Come costruire una app

      Se sei arrivato qui, hai installato Drupal sul tuo computer o in cloud, sei entrato in Drupal come Amministratore e sai come installare i moduli aggiuntivi che servono alla tua app. Sei quindi pronto per costruire la tua prima app ! 

      Costruire la app = configurare Drupal

      La costruzione di una app con Drupal consiste essenzialmente nella configurazione di Drupal attraverso le pagine offerte all'Amministratore da Drupal stesso. In queste pagine, l'Amministratore è guidato a cliccare link, selezionare valori predefiniti e compilare campi testuali, senza necessità di ricordare a memoria comandi o parole chiave. 

      Una difficoltà che potresti incontrare all'inizio è data dalla numerosità dei comandi disponibili e delle selezioni richieste da Drupal. Lo scopo di MieApp è proprio quello di aiutarti a scoprire passo passo le configurazioni più importanti, senza preoccuparti se sbagli o dimentichi qualcosa: in ogni momento potrai tornare indietro e raffinare la tua opera. Grazie a questa flessibilità offerta da Drupal, non è quindi necessario avere tutto chiaro prima di partire a costruire, anzi la progressiva costruzione della app ti fornirà suggerimenti su come proseguire. 

      Cosa vuoi dalla tua app?

      Prima di partire a costruire la tua app con Drupal, ti suggerisco di provare a descriverla sinteticamente rispondendo a queste domande: 

      Scopo: A cosa serve la tua app? Descrivila con poche frasi, come se dovessi convincere i futuri utenti a considerarla.

      Utenti: chi utilizza la app? Solo tu o altre persone? Gli utenti sono tutti uguali per la app o ci sono gruppi di utenti differenti? E' obbligatorio iscriversi alla app per usarla o è disponibile anche ai visitatori non iscritti? Chi autorizza gli utenti ad usarla? Chi gestisce la app?

      Funzioni: cosa possono fare gli utenti con la app? Descrivi le principali azioni o processi che gli utenti (o gruppi di utenti) possono eseguire nella app

      Informazioni: quali informazioni gestisce la app? Descrivi i vari tipi di informazioni gestite e quali sono i diritti degli utenti su di esse.

      Percorsi: come si muovono gli utenti nella app? cosa vedono appena entrano nella app? di quali comandi dispongono gli utenti? Tieni conto che una app costruita con Drupal è formata da un certo numero di pagine, ognuna delle quali mostra una o più informazioni e contiene comandi che consentono di passare ad altre pagine. Descrivere a parole o con un diagramma i percorsi previsti per gli utenti è molto utile per capire se la app sarà facile da usare, verificare che non ci siano pagine senza sbocco e per guidare la costruzione della app. 

      Automazioni: quali attività svolge autonomamente la app senza la necessità di comandi da parte degli utenti?

      Vedremo come tradurre questi aspetti in configurazioni di Drupal, utilizzando una app di esempio.

      • La app di esempio: "Buoni Vicini"

        Una app di esempio

        Da qui in poi, utilizzerò come esempio la costruzione della app "Buoni Vicini" per il prestito di attrezzi tra vicini di casa che puoi vedere in bozza qui:

        https://buonivicini.bottasini.eu

        Le credenziali per accedere alla app sono mostrate nella pagina di login.

        Ovviamente non ti sto invitando a ricostruire sul tuo computer o in cloud proprio questa app: "Buoni vicini" è solo un piccolo esempio di cosa si può fare con Drupal, da cui puoi prendere spunto per costruire l'app di tuo interesse.

        Per descrivere la app di esempio utilizzo il metodo che ti ho suggerito. Nelle Guide che seguono vedremo come realizzare tutti questi aspetti con Drupal.

        Scopo

        La app serve per facilitare la condivisione gratuita di attrezzi tra persone che abitano nella stessa zona o città.

        Utenti

        La app è utilizzata da molti Utenti, che possono prestare i propri attrezzi e chiedere in prestito gli attrezzi altrui. Non ci sono differenze di ruolo tra gli utenti. Per usare la app è necessario iscriversi. I visitatori non possono fare o vedere nulla. La gestione della app è riservata all'Amministratore e (in futuro) a utenti "gestori" che lo aiutano.

        Funzioni

        Formazione del Magazzino: Gli Utenti mettono a disposizione attrezzi di loro proprietà, caricando per ognuno di essi una scheda descrittiva nel "Magazzino" degli attrezzi. Un Utente può disabilitare temporaneamente nuovi prestiti su un proprio attrezzo (es. per manutenzione) o anche ritirarlo definitivamente dal Magazzino.

        Prestito degli attrezzi: Consultando il Magazzino, un Utente può trovare un attrezzo di proprio interesse ed inviare una richiesta di prestito al proprietario dell'attrezzo. Richiedente e proprietario comunicano attraverso la app, senza necessità di esporre i propri contatti personali. Se il proprietario declina la richiesta (ad esempio perché  ritiene l'attrezzo inadatto alle necessità espresse) invita il richiedente a cancellare la richiesta. Altrimenti, il proprietario attiva il prestito in risposta alla richiesta, registrando le date di consegna e di restituzione.

        Valutazione dell'esperienza: al termine del prestito, richiedente e proprietario possono esprimere una valutazione dell'esperienza. 

        In più, l'Amministratore e i Gestori svolgono queste funzioni di gestione della app:

        Gestione degli utenti: accettazione delle richieste di iscrizione e sospensione degli Utenti che si comportano male

        Categorizzazione: predisposizione delle categorie con cui catalogare gli attrezzi per facilitarne la ricerca

        Gestione anomalie: modifica e cancellazione di richieste e prestiti altrui per risolvere situazioni non previste 

        Informazioni 

        Attrezzi: Un attrezzo è un oggetto prestabile. Appartiene all'utente che lo aggiunge nel Magazzino della app. E' descritto da un nome breve, una immagine, una descrizione ed eventuali documenti allegati (es. Manuale d'utilizzo). E' catalogato in una Categoria (vedi sotto). Tutti gli Utenti possono aggiungere Attrezzi. Solo il proprietario dell'Attrezzo può modificarlo e cancellarlo. Tutti gli Utenti vedono tutti gli Attrezzi.

        Categorie: Le Categorie aiutano a cercare gli Attrezzi nel Magazzino. Ogni Categoria appartiene ad un Ambito (es. la "falciatrice" appartiene al "giardinaggio"). Le Categorie sono predefinite dall'Amministratore. Tutte le Categorie sono selezionabili da tutti gli Utenti.

        Richieste: Il prestito è diviso in due parti - Richiesta e Prestito - redatte da due Utenti diversi (il Richiedente ed il Proprietario dell'attrezzo richiesto). Una Richiesta può essere modificata e cancellata solo dal Richiedente ed è visibile solo al Richiedente ed al Proprietario dell'Attrezzo.

        Prestiti. Il Prestito è redatto dal Proprietario dell'Attrezzo in risposta ad una Richiesta. Può essere modificato e cancellato solo dal Proprietario ed è visibile solo al Richiedente ed al Proprietario. Nel Prestito vengono scritte dal Proprietario le date di consegna e di restituzione dell'Attrezzo.

        Messaggi. Un Messaggio è sempre riferito ad una Richiesta (non ad un Prestito, perché non tutte le Richieste ricevono in risposta un Prestito), può essere redatto dal Richiedente o dal Proprietario ed è visto solo da loro. Può essere modificato o cancellato solo dal suo autore. Per una Richiesta può essere scritto nu numero illimitato di Messaggi.  Ad ogni Messaggio è possibile allegare più immagini o documenti.

        Valutazioni.  Una Valutazione è sempre riferita ad un Prestito e può essere espressa solo dal Richiedente e dal Proprietario solo una volta, dopo la riconsegna dell'Attrezzo. La Valutazione contiene un valore che esprime il grado di soddisfazione ed una eventuale nota. La Valutazione è visibile solo al Richiedente ed al Proprietario ed è utilizzata dalla app per le statistiche.

        Automazioni

        La app provvede autonomamente a:

        • cancellare le Richieste rimaste senza risposta dopo tre mesi
        • predisporre pagine di statistiche
        • avvisare un proprietario quando c'è una nuova richiesta su un suo Attrezzo

        Percorsi

        I percorsi offerti agli utenti nella app sono descritti nella prossima pagina.

      • Mappa interattiva dei percorsi

        Nel diagramma che segue (disegnato con LibreOffice Draw), ogni riquadro grigio rappresenta una pagina della app, che può contenere una singola Entità (es. Attrezzo) con le informazioni ad essa correlate o un elenco di Entità (es. Magazzino). Gli ovali indicano i comandi che consentono all'utente di muoversi tra le pagine. In alcuni casi, il contenuto della pagina dipende dal ruolo dell'utente. Il diagramma ha come punto di partenza della app la pagina "Cruscotto", che presenta all'utente le informazioni relative alle sue richieste e prestiti aperti e i comandi per vederne i dettagli, attivare nuove richieste e consultare richieste e prestiti conclusi. In tutte le pagine è previsto un comando (non rappresentato nel diagramma) per tornare al Cruscotto. I colori facilitano la comprensione del diagramma: in giallo il percorso relativo agli Attrezzi, in blu le Richieste, in rosso i Prestiti e in verde i Messaggi. 

        Cliccando sui riquadri grigi verrai portato alla corrispondente pagina del sito buonivicini.bottasini.eu 

        La mappatura dei link sui riquadri è stata realizzata grazie al sito Image Map 

        MagazzinoMiei AttrezziAttrezzoRichiestaPrestitoMie Richieste ConcluseMiei Prestiti ConclusiMessaggioCruscotto
    • Modellare le informazioni con le Entità

      Da questa Guida in poi, presenterò diversi aspetti di Drupal utili alla costruzione delle app, svolgendo prima un minimo di teoria, applicandola poi alla app di esempio. Partiamo da come Drupal gestisce le informazioni.

      Le Entità

      Ogni app gestisce informazioni di varia natura, tra cui dati, documenti, video, immagini, persone, vocabolari ecc. Drupal mette a disposizione un modello generale per gestire tutti questi tipi di informazioni in modo strutturato: le Entità (entity).

      Ci sono Entità che memorizzano le informazioni gestite dalla app (Entità di contenuto) ed Entità che memorizzano la configurazione di Drupal stesso (Entità di configurazione). Nel seguito, quando parleremo di Entità, salvo diversa indicazione intendiamo sempre le Entità di contenuto.

      Ogni Entità è  un insieme strutturato di dati che viene trattato (inserito, modificato, cancellato) come un'unità. Drupal gestisce l'Entità come l'unità elementare di informazione, nel senso che tutte le informazioni che contiene vengono gestite come un tutt'uno: ad esempio, se si cancella una Entità vengono distrutte tutte le informazioni in essa contenute e non è possibile eliminare "parzialmente" una Entità.

      Drupal gestisce diversi tipi di Entità, tra cui Contenuti, Utenti, Termini di Tassonomia, File, Media, Commenti ecc. I moduli aggiuntivi di Drupal possono aggiungere ulteriori tipi di Entità, ad esempio i Gruppi. Per ogni tipo di Entità differente, Drupal mette a disposizione funzioni specializzate: ad esempio, solo le Entità di tipo Utente hanno associate informazioni sul login e funzioni per eseguirlo; solo le Entità di tipo File hanno una dimensione, espressa in KB.

      Alcuni tipi di Entità prevedono una ulteriore specializzazione, chiamata Bundle. L'Amministratore non può creare nuovi tipi di Entità (perché sono definiti dai moduli installati), ma può creare nuovi Bundle e, ovviamente, nuove Entità dei tipi e dei Bundle disponibili:

      Tipo di EntitàSottotipo di Entità (bundle)
      Contenuto (content, node)Tipo di Contenuto (content type)
      Termine di tassonomia (taxonomy term, term)Tassonomia (taxonomy, vocabulary)
      Utente (user) 
      Media (media)Tipo di Media (media type)
      Commento (comment)Tipo di Contenuto del Commento
      Gruppo (group)Tipo di Gruppo (group type)

      I campi delle Entità

      Le informazioni di una Entità sono memorizzate nei suoi Campi. Usando una metafora, l'Entità è una cassettiera ed ogni suo Campo è un "cassetto" in grado di memorizzare uno specifico tipo di informazione. Drupal mette a disposizione molti tipi di Campi, in grado di memorizzare diversi tipi di informazioni: testo (formattato o meno), numeri (interi, decimali...), file, immagini, date, liste di selezione, link a pagine ecc. Alcuni moduli aggiuntivi aggiungono ulteriori tipi di Campo, ad esempio coordinate geografiche.

      L'Amministratore può aggiungere a tipi e sottotipi di Entità un numero illimitato di Campi. Ad esempio, è possibile aggiunge agli Utenti tre Campi testuali per memorizzare il nome, il cognome ed il codice fiscale della persona; al Tipo di Contenuto "Brano musicale" è possibile assegnare i Campi "Cantante" ed "Album". Questa caratteristica è fondamentale per la costruzione delle app in Drupal, perché permette di adattare le Entità alle specifiche esigenze della app, senza lavorare direttamente sulle tabelle del database di Drupal.

      Nome interno ed nome esterno (etichetta) del Campo

      Ogni Campo ha un nome esterno ed un nome interno. Il nome esterno è l'etichetta che l'Amministratore assegna al Campo e col quale il Campo viene visto dagli Utenti. Il nome interno è quello con cui Drupal identifica il Campo ed è costruito automaticamente come field_ seguito dall'etichetta in caratteri minuscoli; ad esempio, il Campo di nome (esterno) "Cognome" è identificato in Drupal col nome (interno) "field_cognome".

      Mentre il nome esterno può essere lo stesso per più Campi, il nome interno è univoco e quindi non ci possono essere due Campi con lo stesso nome interno: se ciò accade, Drupal segnala un errore, invita a modificare il nome interno del nuovo Campo e non lo memorizza fino a quando il nome interno non è univoco: 

      Una volta assegnato, il nome interno non può più essere modificato, mentre il nome esterno può essere cambiato in qualunque momento. L'importanza dei nomi interni dei Campi sarà evidente nella costruzione delle Viste.

      Riferimenti tra Entità

      Tra i tipi di Campi disponibili, ha una particolare importanza il tipo Riferimento (reference), perché permette di definire una relazione tra due tipi di Entità. Ad esempio, se creiamo un Tipo di Contenuto "Brano musicale" ed un Tipo di Contenuto "Album" ed aggiungiamo al Tipo di Contenuto "Brano musicale" un Campo Riferimento che rimanda al tipo "Album", possiamo gestire l'appartenenza di un brano musicale ad un album. Possiamo rappresentare questa relazione come Brano → Album perché, conoscendo il Brano, possiamo arrivare all'Album in cui è inserito. Quando un Utente compila il Campo Riferimento "Album" di un Brano, Drupal lo obbliga a scegliere una delle Entità di tipo Album già memorizzati nella app.

      Campi predefiniti

      Ogni tipo di Entità ha alcuni Campi predefiniti. Ad esempio, gli Utenti hanno i Campi predefiniti Nome utente, Password, Email. i Contenuti hanno il Campo predefinito Titolo, i Termini di Tassonomia il Campo Nome e Campi che servono a collocare il Termine nella Tassonomia (Genitore, Profondità e Peso)

      Tutti i tipi di Entità hanno i seguenti Campi predefiniti, molto utili per la costruzione di una app:

      • Autore: contiene il Riferimento all'Utente che ha creato l'Entità
      • Data di creazione (Inserito il): memorizza data e ora di creazione dell'Entità
      • Data di modifica: memorizza data e ora di ultima modifica dell'Entità
      • Pubblicato: memorizza se l'Entità è visibile oppure nascosta

      Questi Campi sono compilati automaticamente da Drupal, ma possono essere modificati dall'Amministratore. Di default, I Campi predefiniti non sono mostrati agli Utenti, ma vedremo come esporli con le Viste.

      L'identificativo di Entità

      Ad ogni Entità è associato un numero intero che lo identifica univocamente rispetto alle altre Entità dello stesso tipo. Ad esempio, l'Utente Amministratore è il numero "1" ed è l'unico Utente ad avere quel numero, mentre  nulla vieta che vi sia un Contenuto o un File identificati da "1". Il numero univoco è assegnato automaticamente da Drupal all'Entità nel momento in cui viene creata e non può essere modificato, neppure dall'Amministratore. Se l'Entità viene cancellata, il suo numero univoco non viene riciclato. Il numero univoco è memorizzato in un apposito Campo predefinito; il nome di quel Campo varia leggermente col tipo di Entità:  ID per i Contenuti, UID per gli Utenti, TID per i Termini di Tassonomia ecc.

      I Token

      La maggior parte delle informazioni gestite da Drupal in una app sono riutilizzabili in altre parti della app attraverso i Token. Un Token è una parola speciale che identifica una informazione della app e viene sostituita col valore di quella informazione (un concetto molto vicino a quello di "variabile" nei linguaggi di programmazione o di incognita o parametro in matematica).  Nelle prossime Guide faremo un ampio utilizzo dei Token.  

      Anche se Drupal mette nativamente a disposizione un buon numero di Token, raccomando di installare sempre il modulo aggiuntivo Token perché ne estende il numero e le potenzialità.

      In tutte le pagine in cui Drupal accetta Token, mette a disposizione anche un comando (il cui nome varia da contesto a contesto, dal riconoscibile Sfoglia i Token disponibili al più criptico Replacement patterns ma nelle Guide cercherò di indicarlo sempre) con cui consultare l'elenco dei Token disponibili in quel contesto.  L'elenco può presentarsi nei casi più complessi come una gerarchia in cui scendere fino a trovare il Token desiderato: in questi casi, ila voce solitamente più utile è Node, sotto cui si trovano tutti i Token relativi ai Contenuti. Una volta trovato il Token desiderato, lo si copia e incolla nella casella dove serve.

      I Token possono presentarsi in due forme, in base al contesto: tra parentesi quadre es: [node:title] è il Token che restituisce il titolo di un Contenuto; oppure tra parentesi graffe, es: {{ node.title.value }} restituisce lo stesso valore. Non è necessario comprendere in dettaglio questa differenza, perché Drupal provvede a mostrare solo i Token disponibili e nella forma utile al contesto.

      Le Entità della app di esempio

      Vediamo come utilizzare le Entità per gestire le informazioni della app di esempio.

      Attrezzi: Ogni Attrezzo è memorizzato in un Contenuto di tipo "Attrezzo", caratterizzato da questi campi:

      CampoTipoDescrizione
      Nome (titolo)testoDescrizione breve dell'Attrezzo
      Descrizionetesto formattatoDescrizione lunga dell'Attrezzo
      CategoriaRiferimento a CategoriaCategoria cui appartiene l'Attrezzo (Attrezzo → Categoria)
      ImmagineimmagineImmagine che raffigura l'Attrezzo
      AllegatiFile (più valori)Documenti che descrivono l'Attrezzo
      StatoLista di selezioneDisponibile | Sospeso | Ritirato

      Categorie: Ogni Categoria è .memorizzata in un Contenuto di tipo "Categoria" caratterizzato dai seguenti campi:

      CampoTipoDescrizione
      NometestoNome della Categoria. Es. "Falciatrice"
      SinonimitestoAltri termini che identificano la Categoria. Es. "tagliabordi estirpatore"
      Categoria SuperioreRiferimento a CategoriaCategoria superiore. Es. Giardinaggio. Questo Campo consente di costruire una gerarchia di Categorie. (Categoria → Categoria superiore)
      In Drupal la categorizzazione di Entità è di solito realizzata con Tassonomie, perché questo tipo di Entità fornisce una serie di funzioni molto comode per rappresentare gerarchie di qualunque livello di concetti. Per semplicità didattica, preferisco per la app di esempio utilizzare un tipo di Contenuto.

      Richieste: Ogni Richiesta è memorizzata in un Contenuto di tipo "Richiesta" caratterizzato dai seguenti campi:

      CampoTipoDescrizione
      TitolotestoGenerato automaticamente dal Drupal come "Richiesta n. CODICE"
      AttrezzoRiferimento ad AttrezzoAttrezzo chiesto in prestito (Richiesta → Attrezzo)
      Codiceintero serialeCodice univoco generato automaticamente

      L'Utente richiedente è memorizzato come Autore della Richiesta. Lo stato della Richiesta non è memorizzato in un Campo apposito ma è dedotta da altri Campi: la Richiesta è considerata "aperta" se il suo Campo "Prestito" è vuoto, oppure se il Campo "Restituzione" del suo Prestito è vuoto; in tuti gli altri casi è considerata "conclusa".

      Prestiti: Ogni Prestito è memorizzato in un Contenuto di tipo "Prestito" caratterizzato dai seguenti campi:

      CampoTipoDescrizione
      TitolotestoGenerato automaticamente dalla app come "Prestito n. CODICE"
      RichiestaRiferimento a RichiestaRichiesta cui il Prestito risponde (Prestito → Richiesta)
      CodiceIntero serialeCodice univoco generato automaticamente
      ConsegnaDataData di consegna dell'attrezzo (se il prestito avviene)
      RestituzioneDataData di restituzione dell'attrezzo (se il prestito avviene)

      Richiedente e Proprietario non sono memorizzati in Campi appositi ma desunti da altri Campi: dalla Richiesta citata nel Campo "Richiesta" si desume il Richiedente (Autore della Richiesta) ed il Proprietario (Autore dell'Attrezzo citato nel Campo "Attrezzo" della Richiesta). Il Proprietario coincide inoltre con l'Autore del Prestito. Lo Stato del Prestito non è memorizzato in un Campo apposito ma desunto dal Campo "Restituzione": se queto Campo è vuoto, il Prestito è considerato "aperto", se è compilato il Prestito è considerato "concluso".

      Messaggi: Ogni Messaggio è memorizzato da un Contenuto di tipo "Messaggio" caratterizzato dai seguenti campi:

      CampoTipoDescrizione
      TitolotestoGenerato automaticamente come "Messaggio n. CODICE"
      RichiestaRiferimento a RichiestaRichiesta cui si riferisce il Messaggio (Messaggio → Richiesta)
      Testotesto formattatoTesto del Messaggio
      AllegatiFileImmagini o documenti allegati al Messaggio
      Codiceintero serialeCodice univoco generato automaticamente

      Richiedente e Proprietario non sono memorizzati in Campi appositi ma desunti da altri Campi: dalla Richiesta citata nel Campo "Richiesta" si desume il Richiedente (Autore della Richiesta) ed il Proprietario (Autore dell'Attrezzo citato nel Campo "Attrezzo" della Richiesta). L'Autore del Messaggio coincide col Richiedente oppure col Proprietario. L'ordine di presentazione dei Messaggi è dato dalla data di creazione del Messaggio.

      Valutazioni: da scrivere

      • Contenuti

        Cosa sono i Contenuti

        I Contenuti sono il tipo di Entità meno "specializzato" e quindi più utilizzato per gestire informazioni nelle app. Prima di poter gestire in Drupal un qualsiasi Contenuto, è necessario costruirne il tipo: il Tipo di Contenuto fa da modello o "stampo" per la creazione di Contenuti di quel tipo.

        Il Tipo di Contenuto definisce infatti quali Campi formano il Contenuto, i controlli da effettuare sui Campi e come mostrarli, quali Utenti possono inserire Contenuti di quel tipo ecc.

        Appena installato, Drupal offre 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 quali tipi di oggetti, documenti, luoghi ecc. la app deve gestire, ma è opportuno considerare anche "oggetti" più astratti, come procedure, progetti, gruppi di lavoro ecc. 

        Nella app di esempio, abbiamo visto che ci servono i Tipi di Contenuto "Attrezzo", "Categoria" "Richiesta", "Prestito", "Messaggio" e "Valutazione". Si noti che in questa app abbiamo deciso di dividere le informazioni relative al prestito su due Tipi: "Richiesta" e "Prestito": questa scelta facilita la protezione delle informazioni, perché di base in Drupal ogni utente può modificare i propri Contenuti e non quelli degli altri. In generale, è utile suddividere le informazioni in Tipi di Contenuto distinti pensando a come saranno condivisi in scrittura i Contenuti.    

        Come costruire un nuovo Tipo di Contenuto

        Ecco come Amministratore puoi costruire un nuovo Tipo di Contenuto:

        • Vai in Struttura - Tipi di contenuto - Aggiungi un tipo di contenuto
        • Scegli il nome per il nuovo Tipo (es. "Attrezzo") e digita una breve descrizione
        • Scegli i valori per i seguenti Campi predefiniti:
          • Titolo, nome del Campo testo che lo identifica visivamente
          • Promosso alla prima pagina, opzione che lo colloca nella prima pagina del sito (poco utile nella costruzione di una app, lascialo spento)
          • Sempre in cima agli elenchi, opzione che lo colloca in cima agli elenchi (come sopra)
          • 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 si può lasciare spento)
          • Visualizzare informazioni sull'autore e sulla data, opzione che mostra Autore e data di pubblicazione del Contenuto (da valutare se serve per la app, suggerisco di spegnerlo).

        Per aggiungere Campi al Tipo di Contenuto:

        • Vai in Struttura - Tipi di contenuto e clicchiamo Gestione campi a fianco del Tipo di Contenuto
        • Clicca Create new field
        • Scegli il tipo di Campo tra quelli proposti:
        • nella pagina seguente, digita l'etichetta con cui il Campo sarà 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.

        Ora costruisci nella tua installazione Drupal i Tipi di Contenuto che servono alla tua app !

        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 degli Attrezzi è utile per identificare l'attrezzo stesso, per le Richieste e le Proposte le informazioni utili a sono negli altri Campi e il Titolo può limitarsi a indicare il Tipo di Contenuto ed un codice identificativo univoco, ad esempio "Richiesta n. 253", delegando a Drupal la sua compilazione. 

        Per automatizzare la compilazione del titolo devi installare i moduli " Automatic Entity Label" e "Token". Nel nostro esempio serve anche il modulo "Serial". Installati questi moduli:

        • vai in Struttura - Tipi di Contenuto e seleziona Modifica a fianco del Tipo di Contenuto di cui vuoi automatizzare i titoli (es. "Richiesta")
        • clicca Automatic label
        • seleziona Automatically generate the label and hide the label field
        • 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 conoscere i Token disponibili, clicca Sfoglia i token disponibili e naviga in Nodi  fino a trovare il Campo che vuoi sia riprodotto nel Titolo. 

        ATTENZIONE: Nel titolo automatico non è possibile utilizzare l'identificativo dell'Entità (corrispondente al Token [node:nid] perché nel momento in cui si sta creando una nuova Entità quel valore non è ancora noto. Per superare questo problema volendo comunque assegnare un numero univoco all'Entità, si può aggiungere all'Entità un Campo intero seriale (vedi modulo Serial) e utilizzare questo Campo per comporre il titolo automatico. Ad esempio, avendo aggiunto all'Entità di tipo Richiesta un Campo interno seriale di nome "Codice", si può comporre il titolo automatico come "Richiesta n. [node:field_codice:value]".

        I Campi di tipo "intero seriale" non devono essere riusati.

        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, 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: 

        1. esportare in un file l'identificativo dell'Entità ed il valore del Campo, utilizzando il modulo Views Data Export
        2. aggiungere alle Entità un nuovo Campo del tipo desiderato
        3. importare dal file i valori nel nuovo Campo, utilizzando il modulo Feeds
        4. eliminare il Campo iniziale

        Esamineremo qualche dettaglio di questa tecnica in una apposita Guida

      • Gestione base dei Contenuti

        Nella Guida precedente hai creato uno o più Tipi di Contenuto dove memorizzare le informazioni di cui la tua app ha bisogno. In questa Guida vediamo i comandi base disponibili all'Amministratore per iniziare a popolare la app di Contenuti, cioè i cosiddetti comandi CRUD (Create Read Update Delete). Nelle Guide successive vedremo come preparare e mettere a disposizione degli Utenti della app funzioni più comode ed evolute.

        Aggiungere contenuti alla app

        Appena costruisci un nuovo Tipo di Contenuto, Drupal ti mette subito a disposizione una pagina attraverso cui puoi inserire Contenuti di quel tipo. Come Amministratore puoi richiamare la pagina di inserimento cliccando Contenuto - Aggiungi contenuto e selezionando il Tipo di Contenuto. Tutti gli altri Utenti richiamano la pagina di inserimento al link:

        /node/add/tipo_contenuto

        dove tipo_contenuto è il nome del Tipo di Contenuto che stai creando, es:

        /node/add/attrezzo

        APPROFONDIMENTO: La parola "node" (nodo) nell'indirizzo di richiamo di un Contenuto è un residuo delle prime versioni di Drupal, in cui i Contenuti erano appunto chiamati nodi. Essendo profondamente maturato negli anni, in Drupal si ritrovano spesso vestigia del passato. A mio avviso sono considerabili tali le Tassonomie (e quindi i Termini di Tassonomia, oggi sostituibili con gerarchie di Entità) e i File (oggi inclusi nel concetto di Media), anche se se ne continua a farne un ampio utilizzo ed escono tuttora nuovi moduli che arricchiscono questi tipi di Entità.

        Se l'ordine con cui i Campi sono mostrati nella pagina di inserimento non ti soddisfa, vai in Struttura - Tipi di contenuto e seleziona Gestione visualizzazione form a fianco del Tipo di Contenuto: ti viene mostrata una pagina in cui puoi riordinare i Campi trascinandoli. Nella medesima pagina, per alcuni tipi di Campi puoi anche cambiare la modalità (Widget) con cui compilarli. I Widget disponibili dipendono dal tipo di Campo e dai moduli installati. 

        Ritrovare i Contenuti

        Come Amministratore, in Contenuto trovi un semplice modulo per la ricerca dei Contenuti inseriti. Gli altri Utenti useranno il motore di ricerca di Drupal o - meglio - le Viste che tu metterai a loro disposizione.   

        Come viene mostrato un Contenuto

        Per ogni Contenuto inserito, Drupal predispone una pagina che lo visualizza al link:

        /node/id_contenuto

        dove id_contenuto è il codice univoco che identifica il Contenuto.

        Se l'ordine con cui i Campi sono mostrati nella pagina di visualizzazione non ti soddisfa, vai in Struttura - Tipi di contenuto e seleziona  Gestione visualizzazione a fianco del Tipo di Contenuto: oltre a modificare l'ordine, puoi anche nascondere Campi o le loro etichette e, per alcuni tipi di Campi, modificare la modalità (Widget) con cui è mostrato il valore.  Per nascondere un Campo basta trascinarlo sotto Disattivati

        Modificare un Contenuto

        Per modificare un Contenuto, vai nella sua pagina di visualizzazione e clicca Modifica. Puoi anche andare direttamente alla pagina di modifica a questo link:

        /node/id_contenuto/edit

        Eliminare un Contenuto

        Per eliminare un Contenuto, vai alla sua pagina di visualizzazione e clicca Elimina. Puoi anche andare direttamente alla pagina di eliminazione a questo link:

        /node/id_contenuto/delete

        Un Contenuto eliminato non è più recuperabile.

        Nascondere un Contenuto

        Se vuoi rendere invisibile un Contenuto senza eliminarlo (ad esempio per ripresentarlo più avanti), vai in Modifica del Contenuto e disattiva il Campo Pubblicato.

      • Permessi base degli Utenti sulle Entità

        Definiti i Tipi di Contenuto utili alla nostra app (ed eventuali altri tipi di Entità), prima di proseguire nella costruzione della app è opportuno stabilire chi può agire sui Contenuti  e cosa può fare su di essi. Rinviando la gestione degli Utenti ad una Guida più esaustiva, vediamo qui una configurazione minimale degli Utenti e dei loro Permessi sulle Entità della nostra app.

        Creazione degli Utenti

        In Drupal possiamo distinguere tre grandi famiglie di Utenti:

        • gli Amministratori
        • gli Utenti autenticati (o "registrati"), cioè gli Utenti dotati di nome utente e password e che quindi possono entrare nella app
        • gli Utenti anonimi o visitatori, cioè gli Utenti privi di nome utente e password e che quindi non possono entrare nella app ma solo consultare le sue pagine pubbliche 

        Per costruire la app noi lavoriamo dentro Drupal come Amministratori. Gli Amministratori hanno tutti i poteri in Drupal, quindi non risentono di eventuali vincoli che valgono per gli altri Utenti. Per provare il corretto funzionamento della nostra app è quindi necessario interagire con essa come Utenti autenticati o Visitatori. A questo fine è utile definire nella app uno o più Utenti di prova, dando loro i permessi sulle Entità previsti dalla nostra app. 

        Per creare un Utente:

        • vai in Persone e clicca Aggiungi Utente
        • digita email,  nome utente e password
        • disattiva Notifica l'utente del nuovo profilo
        • attiva Attivo e  Utente autenticato

        Non è importante che email sia un indirizzo valido, a meno che tu stia provando funzioni che inviano mail. Definisci fin da subito una regola per la composizione dei nomi utente nella tua app, ad esempio nome.cognome  

        Per la app di esempio, è opportuno definire due o tre Utenti di prova, perché la app prevede uno scambio di informazioni (Richieste, Prestiti, Messaggi) tra più Utenti

        Per interagire con la app nei panni di questo Utente non Amministratore puoi:

        • aprire sullo stesso pc su cui stai costruendo come Amministratore la app un secondo web browser (attenzione: non una seconda finestra dello stesso web browser ma proprio un altro web browser; ad esempio se come Amministratore stai usando Chrome, per l'Utente di prova usa Edge), oppure
        • collegarti alla app da un pc diverso, oppure
        • installare uno dei moduli (es. Masquerade o User Switcher) che consentono all'Amministratore di impersonare temporaneamente un altro Utente, senza necessità di utilizzare un altro web browser o un altro pc 

        Ruoli degli Utenti

        In Drupal gli Utenti appartengono ad uno o più Ruoli. Il Ruolo definisce cosa può fare l'Utente in Drupal. Utente autenticato è il Ruolo base cui appartengono tutti gli Utenti dotati di nome utente e password. Gli Utenti con Ruolo Amministratore hanno tutti i poteri dell'Amministratore. E' possibile definire ulteriori Ruoli con Persone - Ruoli - Aggiungi ruolo.

        Nella app di esempio, tutti gli Utenti hanno gli stessi poteri quindi non è strettamente necessario definire ulteriori Ruoli. Potremmo però aggiungere un Ruolo "Gestore" cui delegare alcune funzioni dell'Amministratore senza però dar loro tutti i poteri dell'Amministratore, ad esempio il potere di modificare e cancellare Contenuti altrui sbagliati.

        Per assegnare o togliere un Ruolo ad un Utente:

        • va in Persone e clicca modifica sull'Utente
        • Nella pagina di modifica, attiva (o disattiva) i Ruoli

        Permessi degli Utenti

        Definito un Ruolo, per stabilire cosa possono fare gli Utenti appartenenti al quel Ruolo occorre modificare i Permessi di quel Ruolo:

        • va in Persone - Permessi: ti viene mostrata una tabella le cui righe sono i Permessi assegnabili e le colonne sono i Ruoli cui assegnarli
        • cerca il Permesso desiderato
        • attiva o disattiva l'incrocio tra la riga del Permesso e la colonna del Ruolo

        Per la app di esempio avevamo stabilito che ogni Utente potesse aggiungere Attrezzi, Richieste, Prestiti e Messaggi e modificare o cancellare solo i propri Contenuti:

        • in Persone - Permessi, cerca "Attrezzo"
        • Per il Ruolo Utente autenticato attiva "Crea nuovo Attrezzo", "Elimina i propri Contenuti", "Modifica i propri Contenuti" lasciando disattivate le altre righe:
        • ripeti l'operazione per "Richiesta", "Prestito" e "Messaggio"

        Se definissimo un Ruolo "Gestore" potremmo attivare per esso anche i Permessi di modifica e cancellazione dei contenuti altrui. 

        Limiti dei Permessi

        L'assegnazione dei Permessi ai Ruoli è un meccanismo molto semplice e potente per autorizzare o negare azioni degli Utenti sulle Entità e sulle funzioni di Drupal. L'installazione di moduli aggiuntivi può aggiungere ulteriori Permessi assegnabili. Questo meccanismo presenta però alcuni limiti, che risulta già evidenti nella costruzione della app di esempio e che potresti riscontare anche nelle tue app.

        Un primo limite è che non esiste un Permesso per nascondere un tipo di Contenuto ad un Ruolo: esiste solo un Permesso che autorizza o proibisce la visualizzazione di tutti i Contenuti (non importa il tipo né l'Autore), che è usato normalmente per nascondere tutti i Contenuti di un sito ai Visitatori. 

        Un secondo limite è che i Permessi agiscono su tutti i Contenuti di un tipo, senza possibilità di definire Permessi a livello di singolo Contenuto o - meglio ancora - sul singolo Contenuto in base ai suoi Campi: nella app di esempio, non possiamo quindi nascondere una Richiesta (o un Prestito o un Messaggio) agli Utenti diversi dall'utente che chiede in prestito l'attrezzo e dall'utente che lo presta.

        Come spesso accade in Drupal, ciò che non è possibile fare con i moduli base può diventare possibile installando un modulo aggiuntivo: vedremo più avanti moduli che consentono di assegnare uno o più Contenuti a più Utenti o a interi Gruppi di Utenti, specificando in dettaglio i Permessi di creazione, visualizzazione, modifica e cancellazione. Per ora, nella app di esempio utilizzeremo una tecnica di nascondimento dei Campi dei Contenuti basata sulle Viste, senza necessità di installare ed imparare altri moduli.

    • Presentare le informazioni con le Viste

      Modellate le informazioni che la app deve gestire e caricati i primi Contenuti, vediamo ora come presentarli agli utenti della app con le Viste di Drupal.

      Cosa sono le Viste?

      Tutte le Entità che abbiamo memorizzato in Drupal possono essere mostrate agli Utenti in molti modi diversi. Nella app di esempio vogliamo mettere a disposizione degli iscritti una lista degli attrezzi disponibili, con la possibilità di attivare su uno di essi una Richiesta di prestito, ma anche che ogni Utente possa vedere le proprie Richieste ricevute ed i Prestiti attivati; vogliamo infine che l'Amministratore possa monitorare l'andamento generale dei prestiti per categoria di attrezzo. Tutte queste esigenze sono "viste" differenti sulle Entità, da mostrare in base all'Utente che sta usando la app ed allo scopo per cui le sta guardando. Lo strumento per ottenerle da Drupal si chiama (non a caso) Vista (View).

      Le Viste sono costruite  dall'Amministratore specificando quali Entità estrarre dal database e come presentarle all'Utente, senza necessità di conoscere il linguaggio di interrogazione del database (SQL) ed il linguaggio di costruzione delle pagine web (HTML).

      A cosa servono le Viste?

      Le Viste sono utilizzate per presentare le Entità all'Utente con modalità differenti, in base alle sue necessità., Ma sono usate anche per aggiungere comandi personalizzati sulle Entità, mostrare informazioni correlate all'Entità mostrata, cercare nelle Entità, filtrare i contenuti dei Campi delle Entità, alimentare le operazioni automatiche sulle Entità ecc.  Imparare a preparare le Viste è quindi fondamentale per costruire app con Drupal. Personalmente, ho un approccio molto "Vista-centrico" alla costruzione delle app.

      Nelle prossime Guide vedremo quindi come costruire diverse Viste per diverse finalità, partendo dalle più semplici e seguendo il percorso previsto per gli Utenti nella app di esempio, evidenziando via via le pagine ed i percorsi che costruiamo nella Guida.

      • La tua prima Vista

        Come primo esempio, costruiamo la Vista "Magazzino" (prevista dalla app di esempio) che elenca gli Attrezzi messi a disposizione dagli Utenti per il prestito.

        Costruire una nuova Vista

        Per creare  la nuova Vista "Magazzino":

        • Vai in Struttura - Viste - Aggiungi nuova vista.
        • Scegli il nome della nuova vista ("Magazzino").
        • In Mostra scegli contenuto di tipo "Attrezzo".
        • Scegli di creare una Pagina e di mostrare il risultato come Tabella

        Le sezioni della Vista

        Salvata la Vista, si apre l'editor della Vista (Views UI), composto dalle seguenti sezioni, ognuna delle quali configura un aspetto della Vista:

        Visualizzazioni elenca le visualizzazioni della Vista Comandi di gestione della Vista
        Nome della Visualizzazione che si sta modificando  Comandi di gestione della Visualizzazione
        Formato definisce come mostrare le Entità (tabella, elenco, mappa, grafico ecc.)Impostazioni pagina definisce l'Indirizzo della pagina ed il  menù da cui richiamarla (*)Relazioni elenca le relazioni tra le Entità 

        Accesso definisce quali Utenti possono vedere la Vista

        Campi elenca i Campi delle Entità da mostrareIntestazione elenca cosa mostrare nella Vista prima delle EntitàFiltri contestuali elenca i filtri da cercare nel link di richiamo della Vista 
        Criteri del filtro elenca i filtri da applicare alle Entità Piè di pagina elenca cosa mostrare nella Vista dopo le  EntitàForm esposto definisce come mostrare i Filtri all'Utente 
        Criteri di ordinamento elenca i Campi su cui ordinare le EntitàComportamento se non ci sono risultati elenca cosa mostrare se non ci sono Entità da mostrareAltro contiene altre configurazioni Vista
         Paginazione definisce quante Entità per volta mostrare 
        Anteprima mostra come viene mostrata la Vista agli Utenti, in base al Display correntemente selezionato ed in base agli eventuali parametri "passati" alla Vista.  

        (*) Questa sezione cambia nome e contenuto in base al tipo di Visualizzazione: si chiama Impostazione pagina se si è scelto di creare una pagina.

        Nell'editor ritroviamo le scelte effettuate al momento della creazione della Vista: 

        • nella sezione Visualizzazioni  compare una Visualizzazione di tipo Pagina e, come Formato la Tabella
        • nella sezione Criteri del filtro compare un Filtro che limita la Vista ai soli Contenuti di tipo "Attrezzo"
        • nella sezione Campi compare il "titolo" degli Attrezzi

         

        Aggiungere Campi nelle sezioni

        In molte sezioni della Vista è necessario aggiungere Campi per raggiungere il risultato desiderato. Indipendentemente dalla sezione, la modalità di identificazione e selezione di un Campo è sempre la medesima:

        • Per aggiungere un Campo in una sezione, clicca Aggiungi a fianco della sezione
        • Appare una finestra "Aggiungi campi", che elenca tutti i Campi disponibili nella Vista per quella sezione particolare
        • Per facilitare la ricerca del Campo desiderato, seleziona in Categoria il tipo di Entità cui appartiene il Campo; ad esempio, se stai cercando il Campo che contiene la username degli Utenti, in Categoria seleziona Utente
        • Per trovare il Campo desiderato, digita parte del suo nome in Cerca
        • In caso di omonimie, per assicurarti di aver scelto il Campo desiderato, controlla nella colonna Descrizione che il Campo appartenga al tipo di Entità giusto
        • Per selezionare il Campo, attiva la casella al suo fianco e clicca Aggiungi e configura campi
        • Nella finestra di configurazione che appare successivamente, seleziona la Relazione che identifica l'Entità in cui leggere il Campo: se il Campo appartiene alla Entità principale su cui stai costruendo la Vista (cioè quella che hai scelto mentre creavi la Vista) non selezionare alcuna Relazione. Su questo punto tornerò con molti esempi, quindi per ora non preoccuparti.
        • In base alla sezione in cui stai lavorando, la finestra di configurazione può chiedere altre informazioni, che spiegherò caso per caso.
        • Salva

        Scegliere quali Campi mostrare nella Vista

        La sezione Campi elenca i Campi che la Vista mostra. Se, oltre al titolo dell'Attrezzo, vogliamo mostrare nella Vista "Magazzino" la sua immagine:

        • nella sezione Campi clicca Aggiungi
        • come spiegato sopra, cerca e seleziona il Campo "immagine" che appare in Attrezzo:
        • Nella finestra di configurazione, come Stile immagine del Campo seleziona Miniatura per uniformarne e ridurne le dimensioni

        Con la stessa modalità, aggiungi il Campo "Descrizione" e, nella sua configurazione, attiva Escludi dalla visualizzazione per non mostrarlo all'Utente: ci servirà tra poco per eseguire ricerche nel Magazzino.

        Modificare l'ordine dei Campi

        Se l'ordine delle colonne (Campi) nella tabella non ti soddisfa, nella sezione Campi clicca Rearrange e riordinali. 

        Campi e Token

        Ad ogni Campo aggiunto alla Vista corrisponde un Token che contiene il valore di quel Campo e che puoi usare negli altri Campi. Ogni Campo "vede" i Token dei Campi che lo precedono nella sezione Campi ma non "vede" i Token dei Campi che lo seguono, quindi l'ordine dei Campi influenza il riuso del valore di un Campo in un altro Campo. L'elenco dei Token visibili in un Campo è disponibile sotto Replacement patterns del Campo stesso e da lì può essere copiato ed incollato.

        Per usare il valore di un Campo A in un Campo B:

        • clicca sul Campo B
        • Sotto Replacement Patterns di B trova il Token corrispondente al Campo A (lo riconosci sia dall'ordine di elencazione sia dal nome)
        • Sempre sotto Replacement Patterns trova il Token corrispondente al Campo B (è l'ultimo Token elencato)
        • Sotto Risultati di riscrittura attiva Sovrascrivere l'output di questo campo con testo personalizzato e come Testo digita un testo a tuo piacere, in cui puoi inserire sia il Token di A (che sarà sostituito dal valore di A) sia il Token di B (che sarà sostituito dl valore originario di B)

        Modificare l'ordine delle Entità

        Gli attrezzi sono elencati nella tabella in un ordine casuale. Se li vuoi ordinare per nome: 

        • nella sezione Criteri di ordinamento clicca Aggiungi
        • cerca e seleziona il Campo Titolo dell'Attrezzo
        • nella finestra di configurazione, seleziona l'ordinamento ascendente.

        Se metti più criteri di ordinamento, essi vengono eseguiti nell'ordine in cui sono mostrati, dall'alto verso il basso.

        Filtrare le Entità

        La  sezione Criteri del filtro elenca i Filtri che limitano quali Entità mostrare nella Vista. Un Filtro è formato di tre parti:

        • il Campo su cui agisce il Filtro (es. "Stato")
        • l'operatore con cui svolgere il confronto (es. è uguale a)
        • il valore da confrontare col contenuto del Campo (es. "Disponibile")

        Di default c'è sempre il Filtro "Contenuto pubblicato = Si", che evita di mostrare Contenuti tenuti nascosti. Nella Vista "Magazzino" troviamo anche il Filtro Tipo di Contenuto = Attrezzo che avevamo impostato nel momento della creazione della Vista. Per limitare la Vista ai soli Attrezzi attualmente disponibili, aggiungiamo un Filtro sul Campo "Stato" imponendo che sia uguale a "Disponibile".

        Filtri esposti all'Utente

        I Filtri impostati nella sezione Criteri del filtro sono per default nascosti all'Utente. Attivando Esponi questo filtro, per permettere ai visitatori di modificarlo, il Filtro viene mostrato perché l'Utente possa modificarne il valore ed eventualmente anche l'operatore (ma non il Campo su cui agisce). Ad esempio, il Filtro sopra descritto che limita la Vista ai soli attrezzi disponibili potrebbe essere esposto, per consentire all'Utente di scegliere di vedere anche gli Attrezzi di cui è stato sospeso il prestito. 

        Cercare nella Vista

        I Filtri esposti sono particolarmente utili per consentire all'Utente di trovare nella Vista le Entità che soddisfano uno o più criteri di ricerca. In particolare, se aggiungiamo ed esponiamo il Filtro Globale - Combina filtri dei campi, all'Utente verrà mostrata una finestra di ricerca, in cui digitare una o più parole che saranno cercate su più Campi contemporaneamente, purché i Campi siano tutti di tipo testo e siano presenti nella sezione Campi. Ecco come impostare la ricerca:

        • nella sezione Criteri del filtro aggiungi il Filtro Combina filtri dei campi ed attiva Esponi questo filtro, per permettere ai visitatori di modificarlo
        • come operatore seleziona Contiene ogni parola, in modo da poter stringere la ricerca digitando più parole
        • in Scegli i campi da combinare per il filtraggio seleziona i Campi testuali in cui cercare; nella nostra Vista: "titolo" e "descrizione"

        Paginare la Vista

        Se l'elenco delle Entità mostrato dalla Vista è lungo, conviene presentarlo in pagine:

        • Nella sezione Paginazione seleziona Risultati paginati, paginatore ridotto oppure Risultati paginati, paginatore completo
        • Indica quante Entità mostrare in ogni pagina (es. "10") 

        Aggiungere informazioni per l'Utente

        Nella sezione Intestazione possiamo aggiungere informazioni che saranno mostrate all'Utente sopra l'elenco degli Attrezzi:

        • aggiungi Riassunto del risultato - Globale - Mostra il riassunto del risultato, per esempio gli elementi per pagina. per mettere a disposizione dell'Utente il numero di Attrezzi elencati;
        • in Visualizzazione digita "@total Attrezzi disponibili al prestito. Clicca su un Attrezzo per vederne le caratteristiche e chiederlo in prestito.<br>", dove @total sarà sostituito dal numero di Attrezzi elencati e "<br>" è una istruzione che dice di andare a capo.
      • Estendere le Viste con le relazioni

        Relazioni tra Entità

        Nella Guida precedente abbiamo costruito una semplice Vista "Magazzino", che mostra le informazioni memorizzate nelle Entità scelte per quella Vista (gli Attrezzi). Vediamo ora come arricchire una Vista con informazioni memorizzate in altre Entità, collegate da relazioni alle Entità della Vista. 

        Le relazioni tra Entità sono basate sui Campi Riferimento. Una Entità A è in relazione con una Entità B se l'Entità A ha un Campo Riferimento che rimanda all'Entità B. Rappresentiamo sinteticamente questa relazione come A → B

        Grazie al Campo Riferimento, quando in una Vista si conosce l'Entità A si può risalire all'Entità B ed utilizzarne le informazioni insieme alle informazioni di A.

        In una Vista basata sulle Entità di tipo A, per risalire alle corrispondenti Entità di tipo B occorre dichiarare la relazione A→B nella sezione Relazioni della Vista e poi usare la relazione nelle altre sezioni della Vista. 

        Ad esempio, nella Vista "Magazzino" che elenca gli Attrezzi (A) vogliamo aggiungere le informazioni sulla Categoria cui ogni Attrezzo appartiene (B), grazie al Campo "Categoria" dell'Attrezzo che rimanda alla Categoria (Attrezzo → Categoria). Grazie al Campo predefinito "Autore" dell'Attrezzo, possiamo anche aggiungere alla Vista il nome del Proprietario dell'Attrezzo (Attrezzo → Autore).

        Come dichiarare una relazione nella Vista

        Per dichiarare la relazione Attrezzo → Categoria basata sul Campo "Categoria" dell'Attrezzo:

        • nella sezione Relazioni della Vista clicca Aggiungi
        • come spiegato, seleziona "Categoria" dell'Attrezzo, che è elencato come contenuto referenziato da seguito dal nome interno del Campo ("field_categoria") e che appare in: "attrezzo"
        • Nella finestra di configurazione, come titolo amministrativo della relazione digita "categoria dell'attrezzo" perché, grazie a questa relazione, identifichi appunto la Categoria associata all'Attrezzo.

        Per dichiarare la relazione Attrezzo → Autore basata sul Campo Autore dell'Attrezzo:

        • nella sezione Relazioni della Vista clicca Aggiungi
        • cerca "autore" e seleziona Utente - Contenuto - Nome utente dell'autore del contenuto e, come titolo amministrativo, digita "proprietario"

        Come usare le relazioni nella Vista

        Dichiarata una relazione A→B nella sezione Relazioni, per usare nelle altre sezioni della Vista un Campo dell'Entità B basta selezionare quella relazione nella finestra di configurazione del Campo. Ecco ad esempio come aggiungere alla Vista il Campo "titolo" della Categoria cui appartiene un Attrezzo:

        • nella sezione Campi clicca Aggiungi
        • Seleziona il Campo titolo e, nella finestra di configurazione, come Relazione seleziona "Categoria dell'attrezzo"

        Ed ecco come aggiungere il nome del Proprietario dell'Attrezzo:

        • seleziona Nome - Utente - Il nome dell'utente o dell'autore e, come Relazione, seleziona "proprietario"; come Etichetta digita "Proprietario"

        Relazioni concatenate

        Nella app di esempio, una Categoria (es. "Cesoia") può appartenere ad una Categoria superiore (es. "Giardinaggio"). La relazione Categoria → Categoria Superiore è basata sul Campo "Categoria Superiore" della Categoria. In una Vista basata sugli Attrezzi, con la catena di relazioni Attrezzo → Categoria e  Categoria → Categoria Superiore possiamo associare all'Attrezzo anche la Categoria superiore: 

        Come esempio, vediamo come aggiungere alla Vista "Magazzino" anche il titolo della Categoria Superiore: 

        • nella sezione Relazioni clicca Aggiungi
        • seleziona il Campo "Categoria Superiore" della Categoria, elencato come Contenuto referenziato da field_categoria_superiore" che appare in Categoria
        • Nella finestra di configurazione del Campo, come Relazione seleziona "Categoria dell'attrezzo" e come titolo amministrativo digita "Categoria superiore"

        Non ci sono limiti alla lunghezza delle catene di relazioni: l'importante è nella sezione Relazioni le relazioni siano elencate nell'ordine corretto. Drupal evidenzia la dipendenza di una relazione da una precedente mettendone il nome tra parentesi: ad esempio "(categoria dell'attrezzo) categoria superiore" indica che la relazione che mette a disposizione le informazioni sulla categoria superiore dipende dalla precedente relazione "categoria dell'attrezzo"

        In tutte le altre sezioni della Vista, per accedere ad un Campo di una Entità messa a disposizione da una relazione, basta selezionarla come Relazione nella configurazione del Campo. In questo modo, nella sezione Campi possiamo aggiungere alla Vista "Magazzino" il Campo "Sinonimi" della Categoria ed i Campi "Titolo" e "Sinonimi" della Categoria Superiore; nascondiamo i Campi "Sinonimi" (li useremo per la ricerca ma confonderebbero l'Utente se mostrati) e riordiniamo i Campi, per mostrare da sinistra verso destra prima la Categoria superiore (di cui possiamo cambiare etichetta in "Ambiente"), poi la Categoria ed infine l'Attrezzo vero e proprio:

        Nella sezione Criteri del filtro Ora possiamo estendere la ricerca nella Vista "Magazzino" alla Categoria, alla Categoria Superiore ed ai loro Sinonimi:

        • Nella sezione Criteri del Filtro seleziona il Filtro Globale: Combina filtri dei campi (esposto) che avevamo già creato
        • In Scegli i campi da combinare per il filtraggio estendiamo la ricerca a tutti i Campi elencati, che ora includono titolo e descrizione dell'Attrezzo, titolo e sinonimi della Categoria e titolo e sinonimi della Categoria Superiore.

        Infine, nella sezione Criteri di ordinamento ordiniamo gli Attrezzi per titolo di Categoria superiore, titolo di Categoria e titolo dell'Attrezzo. 

        Relazioni inverse

        Nelle Viste è anche possibile usare una relazione A→ B in senso inverso, cioè per identificare A partendo da B come se fosse B→ A  Ecco come.

        Quando nella sezione Relazioni selezioni il Campo su cui si basa la relazione, al posto di selezionare la riga:

        Titolo

        Categoria

        Descrizione

        Contenuto referenziato da CContenutoche appare in A

        che identifica l'Entità B richiamata dal campo C dell'Entità A (quindi  A→ B), seleziona invece la riga:

        Titolo

        Categoria

        Descrizione

        Contenuto che usa CContenutoRelate each A with a C set to the content item

        che identifica l'Entità A come l'Entità che utilizza il Campo C per referenziare B (quindi B→ A). 

        Ad esempio, per la relazione Attrezzo Categoria, se selezioni la riga evidenziata in verde la usi in senso diretto (dall'Attrezzo risali alla Categoria), mentre se selezioni la riga evidenziata in giallo la usi in senso inverso (dalla Categoria risali all'Attrezzo).  

        ATTENZIONE ! Usando la relazione A B in senso diretto, dato A si trova un solo B (a meno che il Campo Riferimento ammetta più valori di B). Usando la stessa relazione in senso inverso (B A), potrebbe capitare che identifichi più A. Ad esempio, se l'Entità "Disco" ha un Campo "Cantante" che ammette un solo valore, la relazione Disco Cantante restituisce un solo Cantante; ma se usiamo quella relazione in senso inverso potrebbe restituire più di un Disco, cioè tutti i Dischi di quel Cantante.   

        Nelle prossime Guide, sfrutteremo questa possibilità nella app di esempio, per trovare il Prestito attivato in risposta ad una Richiesta (per come abbiamo disegnato le Entità, la relazione va infatti dal Prestito alla Richiesta e non viceversa).

      • Filtrare le Viste sull'Utente

        Nelle Guide precedenti abbiamo costruito la Vista "Magazzino", che elenca tutti gli Attrezzi disponibili al prestito. Vogliamo ora mettere a disposizione di ogni Utente una Vista "Miei Attrezzi" come una variazione della Vista "Magazzino" che mostra solo gli Attrezzi di proprietà dell'Utente stesso. Nella prossima Guida aggiungeremo i comandi per aggiungere un Attrezzo, passare da una Vista all'altra con un click e predisporre il comando che porta l'Utente al Cruscotto della app. 

        I passaggi per ottenere questo risultato sono:

        • creare la Vista "Miei Attrezzi" come variazione della Vista "Magazzino"
        • aggiungere un Filtro a "Miei Attrezzi" che la limiti ai soli Attrezzi dell'Utente che sta usandola, cioè il cosiddetto Utente corrente (current user)

        Puoi vedere il risultato guardando la Vista "Magazzino" e la Vista "Miei Attrezzi" sul sito di esempio.

        Creare una variazione di una Vista

        Per non creare la Vista "Miei Attrezzi" da zero, possiamo crearla una variazione della Vista "Magazzino" e poi adattarla alle nuove necessità. Per creare una variazione di una Vista esistente ci sono due metodi: fare una copia della Vista originale, oppure creare una nuova Visualizzazione della Vista originale. Vediamo entrambi i metodi ed i loro pro e contro.

        Creare una nuova Vista come copia della Vista originale

        Per duplicare la Vista originaleVai in Struttura - Viste e seleziona Duplica a fianco della Vista originale
        Per distinguere la nuova Vista dalla Vista originaleDai un nome significativo alla nuova Vista e modifica anche il nome interno
        Per evitare che Drupal confonda le due VisteNella sezione Impostazioni pagina della nuova Vista modifica il Percorso differenziandolo da quello della Vista originale  

        I vantaggi di questo metodo sono la sua semplicità e l'impossibilità di rovinare per errore la Vista originale. Lo svantaggio è che qualunque modifica si apporterà in futuro alla Vista originale non verrà applicato automaticamente alla nuova Vista.

        Creare una nuova Vista come nuova Visualizzazione della Vista originale.

        Per creare la nuova Visualizzazione della Vistaseleziona Duplica page:  in Visualizzazioni appare una seconda Visualizzazione di nome "page". Da qui in poi, prima di effettuare una qualunque modifica, assicurati di agire sulla Visualizzazione desiderata (originale o nuova) cliccandovi sopra.
        Per distinguere la nuova Visualizzazione dalla Visualizzazione originale Clicca su Nome visualizzato e rinominala (es. "Miei Attrezzi") per distinguerla dall'originale
        Per evitare che Drupal confonda le due VisteNella sezione Impostazioni pagina della nuova Visualizzazione modifica il Percorso differenziandolo da quello della Visualizzazione originale  

        Quando apporti una qualunque modifica in una delle due Visualizzazioni, nella casella Per puoi decidere se applicarla a tutte le Visualizzazioni oppure solo alla Visualizzazione selezionata in quel momento. Il pulsante in fondo conferma tale scelta:   

        Il vantaggio di questo metodo è che puoi facilmente estendere le modifiche a tutte o alcune delle variazioni di una Vista. Vedremo inoltre in Guide successive che questo è il metodo standard per creare alcuni Viste che si allegano a Entità (EVA) o ad altre Viste. Lo svantaggio di questo metodo è che, se non si sta attenti, si rischia di rovinare una Vista funzionante applicando ad essa una modifica pensata per un'altra Visualizzazione della stessa Vista. Suggerisco questo secondo metodo quando la nuova Vista si differenzia dall'originale per pochi dettagli. 

        Filtrare la Vista sull'Utente corrente

        Abbiamo visto nella Guida precedente come usare in una Vista informazioni contenute in Entità collegate da un Campo Riferimento alle Entità principali della Vista stessa. Creata nella Vista "Magazzino" una nuova Visualizzazione "Miei Attrezzi", vediamo come aggiungervi l'informazione sull'Utente Proprietario dell'Attrezzo e usarla per filtrare gli Attrezzi, limitandoli a quelli di proprietà dell'Utente corrente.

        identifica il proprietario dell'Attrezzo, che coincide con l'Autore dell'AttrezzoNella sezione Relazioni  aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto e rinominala come "Proprietario"
        filtra la Visualizzazione limitandola ai soli Attrezzi di proprietà dell'Utente correnteNella sezione Criteri del filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "Proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si

         

      • Aggiungere comandi nella Vista

        In questa Guida vediamo come aggiungere comandi sopra o sotto l'elenco delle Entità mostrato nella Vista e come aggiungere comandi sulle singole Entità elencate nella Vista:

        Comando nella Intestazione della Vista
        Entità 1Comando sulla Entità 1
        Entità 2Comando sulla Entità 2
        EntitàComando sulla Entità 3
        Comando nel Piè di pagina della Vista

        Aggiungere comandi alla Vista

        Per "comando" intendo qui un link che, cliccato dall'Utente, consente di passare ad un'altra pagina della app o di aggiungere nuove Entità. Vedremo in Guide successive come aggiungere comandi che eseguono operazioni più complesse.

        Come esempio, completiamo le Viste "Magazzino" e "Miei Attrezzi" con comandi che consentano di passare da una Vista all'altra e di passare al Cruscotto della app. Nella Vista "Miei Attrezzi" vogliamo anche aggiungere il comando per caricare un nuovo Attrezzo nella app. 

        Perché il comando sia mostrato una volta sola (e non ripetuto per ogni Entità elencata dalla Vista) occorre posizionarlo nella sezione Intestazione o nella sezione Piè di pagina. della Vista. Per facilitarci il compito di aggiungere il comando senza dover scrivere codice HTML, suggerisco di installare ed attivare il modulo aggiuntivo Views Linkarea, che consente di aggiungere link alla Intestazione o Piè di pagina delle Viste senza necessità di conoscere il linguaggio HTML.

        Grazie a questo modulo, ecco come aggiungere alla Vista "Miei Attrezzi" il comando "Aggiungi Attrezzo" in cima all'elenco degli Attrezzi:

        aggiungi il link in cima all'elenconella sezione Intestazione aggiungi  Link - Globale - Provide an internal or external link
        mostra il comando anche se non ci sono ancora Attrezzi dell'Utente nella configurazione del link attiva Visualizza anche se la vista non da risultati
        scegli il testo del comando da mostrare all'Utentein Testo del collegamento digita "Aggiungi Attrezzo"
        definisci cosa esegue il comandoin Percorso del link digita il link da eseguire "/node/add/attrezzo"
        mostra il comando come un pulsante colorato anziché solo come un linkin Classe del link digita "btn btn-primary" (questa opzione può cambiare in base al tema grafico installato)  

        Con la stessa modalità aggiungiamo alla Vista "Miei Attrezzi" il comando "Magazzino" per tornare al Magazzino (Testo del collegamento: "Magazzino" e Percorso del link: "/magazzino") ed il comando "Cruscotto" per andare al Cruscotto della app (Testo del collegamento: "Cruscotto" e Percorso del link: "/cruscotto"); nella Vista "Magazzino" i comandi "Cruscotto" e "Miei Attrezzi" ("/miei-attrezzi")

        Aggiungere comandi sulle Entità elencate in una Vista

        Per aggiungere su ogni singola Entità elencata in una Vista un comando che agisce su quella Entità si può aggiungere alla sezione Campi della Vista un Campo Testo personalizzato - Globale - Fornisce testo o link personalizzato. Ad esempio, volendo aggiungere a fianco di ogni Attrezzo elencato nella Vista "Magazzino" un comando "Coda" che elenca le Richieste ancora aperte su quell'Attrezzo:

        trova l'identificativo dell'Attrezzo e nascondilonella sezione Campi aggiungi  ID - Contenuto e attiva Escludi dalla visualizzazione 
        aggiungi il Campo che conterrà il comandonella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato.
        definisci come si presenta il comando all'utentecome Testo del Campo digita "Coda", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato.
        definisci cosa succede quando l'utente clicca il comando come Percorso del link digita l'indirizzo della Vista che elenca le Richieste aperte sull'Attrezzo (es. "/richieste-aperte") passandole l'identificativo dell'Attrezzo stesso, che è contenuto nel Token {{ nid }} corrispondente al primo Campo e che trovi elencato sotto Replacement patterns, es. "/richieste-aperte/{{ nid }}"
      • Arricchire la pagina di una Entità con le Viste

        Consultando la Vista "Magazzino" che abbiamo creato nelle Guide precedenti, un Utente può trovare un Attrezzo di suo interesse e, cliccandovi sopra, accedere alla pagina dell'Attrezzo. Vediamo come personalizzare la pagina dell'Attrezzo con informazioni e comandi che dipendono sia dall'Attrezzo sia dall'Utente (vedi esempio in azione) 

        EVA: una Vista dentro la pagina di una Entità

        Per arricchire la pagina di una Entità con informazioni prese da altre Entità e con comandi che dipendono dall'Entità e dall'Utente, possiamo usare le EVA (Entity Views Attachment), cioè Viste che vengono inserite ("allegate") nella pagina dell'Entità. Per costruire le EVA occorre installare ed attivare il modulo aggiuntivo EVA: Entity Views Attachment.

        La creazione di una EVA richiede i seguenti passaggi;

        Crea la EVACrea la Vista come al solito, poi nella sezione Visualizzazioni della Vista clicca Aggiungi - EVA. Appare una nuova Visualizzazione EVA
        Collega la EVA alla pagina dell'EntitàNella nuova sezione Entity content settings (che sostituisce la sezione Impostazioni pagina) della Visualizzazione EVA, seleziona il tipo di Entità ed il Bundle cui la Vista deve essere allegata (es. "Contenuto" - "Attrezzo")
        metti a disposizione della EVA l'identificativo della Entità in cui verrà richiamataNella sezione Filtri contestuali aggiungi il Campo identificativo dell'Entità (vedremo in una prossima Guida una spiegazione più estesa dei Filtri contestuali)
        utilizza l'identificativo dell'Entità nelle altre sezione della EVAL'identificativo dell'Entità è disponibile nel Token {{ raw_arguments.nid }} 

        Esempi di EVA

        Con riferimento alla app di esempio, esemplifichiamo le potenzialità delle EVA personalizzando la pagina dell'Attrezzo. Come sempre, il metodo qui illustrato è generalizzabile per personalizzare la pagina di una qualunque Entità della tua app. Vogliamo che la pagina di ogni Attrezzo mostri:

        Se l'Utente è il proprietario dell'AttrezzoSe l'Utente non è il proprietario dell'Attrezzo
        un comando per tornare a "Miei Attrezzi" ed un comando "Prestiti conclusi sull'Attrezzo" per vedere la storia dei prestiti sull'Attrezzoun comando per tornare a "Magazzino" ed un comando "Chiedi in prestito " per chiederlo in prestito

        i dati dell'Attrezzo, della sua Categoria e del suo Proprietario

        l'elenco delle Richieste e Prestiti attualmente aperti sull'Attrezzo 

        Per ognuno dei riquadri sopra elencati dobbiamo costruire una EVA.  

        EVA COMANDI DEL PROPRIETARIO

        Questa EVA mostra al solo Proprietario dell'Attrezzo i comandi "Miei Attrezzi" e "Prestiti conclusi sull'Attrezzo".

        crea la EVAvai in Struttura - Viste - Aggiungi nuova vista;  scegli il nome della Vista ("Comandi Attrezzo Proprietario");  in Mostra scegli contenuto di tipo "Attrezzo"; scegli di creare una Pagina e di mostrare il risultato come Elenco non formattato di campi. Nella sezione Visualizzazioni cliccare Aggiungi - EVA
        aggancia la EVA alla pagina dell'AttrezzoNella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Attrezzo"
        passa alla EVA l'identificativo dell'AttrezzoNella sezione Filtri contestuali aggiungi ID - Contenuto
        identifica il Proprietario dell'Attrezzo, con la relazione Attrezzo → AutoreNella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto e rinomina come "proprietario"
        limita la visualizzazione al ProprietarioNella sezione Criteri del Filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si
        mostra il comando "Miei Attrezzi" Nella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Miei Attrezzi", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/miei-attrezzi" e come Classe del link digita "btn btn-primary"
        mostra il comando "Prestiti conclusi sull'Attrezzo" Nella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Prestiti conclusi sull'Attrezzo", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/miei-prestiti-conclusi/{{ raw_arguments.nid }}" (la sintassi di questo comando sarà spiegata nella prossima Guida) e come Classe del link digita "btn btn-primary"
        alline orizzontalmente i due comandiNella sezione Formato, in Mostra - Impostazioni attiva Campi allineati per tutte e due i Campi.

        EVA COMANDI PER NON PROPRIETARIO

        Questa EVA mostra agli Utenti diversi dal proprietario dell'Attrezzo i comandi "Magazzino" e "Chiedi in prestito questo Attrezzo". Si può creare come duplicazione o variazione della precedente, cambiando oltre al nome (es. "Comandi Attrezzo non Proprietario") questi aspetti:

        limita la visualizzazione agli Utenti diversi dal Proprietario Nella sezione Criteri del Filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona no
        mostra il comando "Magazzino" Nella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Magazzino", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/magazzino" e come Classe del link digita "btn btn-primary"
        mostra il comando "Chiedi in prestito questo Attrezzo" Nella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Chiedi in prestito questo Attrezzo", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/node/add/richiesta?attrezzo={{ raw_arguments.nid }}" (la sintassi di questo comando sarà spiegata nella prossima Guida) e come Classe del link digita "btn btn-primary"

        EVA DATI DELL'ATTREZZO

        Di default, la pagina di una Entità mostra tutti i Campi dell'Entità stessa. Perché quindi creare una EVA per mostrarli? Per un paio di buoni motivi: 

        • la pagina dell'Entità non mostra di default il nome del Proprietario dell'Attrezzo, che è contenuto in uno dei Campi predefiniti non elencato nella pagina (Campo Autore)
        • usare una EVA al posto dell'esposizione diretta dei Campi consente di personalizzare la loro presentazione, ad esempio per affiancare al Campo Categoria dell'Attrezzo anche l'informazione sulla Categoria superiore. 

        In generale, io preferisco usare una EVA per presentare i dati di una Entità anziché limitarmi a mostrarne i Campi. Per presentare in modo "allineato" etichette e valori dei Campi, può risultare utile installare ed attivare il modulo aggiuntivo "Views Flipped Table". Grazie a questo modulo possiamo costruire la Vista come tabella e poi "ruotarla" invertendo le righe con le colonne. Ad esempio se la Vista in formato tabella è così:

        AttrezzoCategoriaAmbienteNotaAllegatiProprietario
        LevigatriceUtensiliCasa Manuale utenteCarla.Bianchi

        selezionando come Formato Flipped Table, la tabella viene mostrata così:

        AttrezzoLevigatrice
        CategoriaUtensile
        AmbienteCasa
        Nota 
        AllegatiManuale Utente
        ProprietarioCarla.Bianchi

        Se decidi di usare anche tu una Flipped View per mostrare i dati dell'Attrezzo a tutti gli Utenti:

        nascondi i Campi dell'AttrezzoIn Struttura - Tipi di contenuto - Attrezzo - Gestione visualizzazione nascondi tutti i Campi trascinandoli sotto Disattivati.
        crea la EVAvai in Struttura - Viste - Aggiungi nuova vista,  scegli il nome della vista ("Dati Attrezzo");  in Mostra scegli contenuto di tipo "Attrezzo"; scegli di creare una Pagina e di mostrare il risultato come Flipped Table. Nella sezione Visualizzazioni cliccare Aggiungi - EVA
        aggancia la EVA alla pagina dell'AttrezzoNella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Attrezzo"
        passa alla EVA l'identificativo dell'Attrezzo:Nella sezione Filtri contestuali aggiungi ID - Contenuto
        identifica il Proprietario dell'Attrezzo, con la relazione Attrezzo → AutoreNella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto e rinomina come "proprietario"
        identifica la Categoria dell'Attrezzo, con la relazione Attrezzo → Categoriaaggiungi  Contenuto referenziato da field_categoria - Contenuto - Appare in: richiesta e rinomina come "categoria"
        identifica la Categoria superiore dell'Attrezzo, con la relazione Categoria → Categoria Superiorenella sezione Relazioni aggiungi  anche Contenuto referenziato da field_categoria_superiore - Contenuto - Appare in: categoria, come Relazione seleziona "categoria"  e rinomina come "categoria superiore"
        mostra le informazioni relativa all'Attrezzo, al Proprietario ed alle Categorienella sezione Campi cambia Etichetta del Campo titolo (presente per default) in "Attrezzo"; aggiungi un altro Campo "titolo", come Relazione seleziona "categoria" e cambia Etichetta in "Categoria"; aggiungi un altro Campo "titolo", come Relazione seleziona "categoria superiore" e cambia Etichetta in "Categoria superiore"; aggiungi un Campo "nome", come Relazione seleziona "proprietario" e cambia Etichetta in "Proprietario"; aggiungi i Campi "Immagine", "Nota" ed "Allegati" e riordina tutti questi Campi a piacere.

        EVA RICHIESTE E PRESTITI APERTI

        Questa EVA mostra al solo Proprietario dell'Attrezzo l'elenco delle Richieste aperte sull'Attrezzo e l'eventuale Prestito concesso in risposta ad esse. 

        crea la EVAvai in Struttura - Viste - Aggiungi nuova vista,  scegli il nome della vista ("Richieste aperte su Attrezzo");  in Mostra scegli contenuto di tipo "Richiesta"; scegli di creare una Pagina e di mostrare il risultato come Tabella. Nella sezione Visualizzazioni cliccare Aggiungi - EVA
        aggancia la EVA alla pagina dell'AttrezzoNella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Attrezzo"
        identificare l'Attrezzo oggetto della Richiesta, con la relazione Richiesta→ Attrezzonella sezione Relazioni aggiungi Contenuto referenziato da field_attrezzo - Contenuto - Appare in: richiesta e rinomina come "attrezzo"
        passa alla EVA l'identificativo dell'AttrezzoNella sezione Filtri contestuali aggiungi ID - Contenuto e come Relazione seleziona "attrezzo"
        identifica il Richiedente, con la relazione Richiedente → AutoreNella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto e rinomina come "richiedente"
        identifica il Proprietario dell'Attrezzo, con  la relazione Attrezzo → AutoreNella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto, come Relazioni seleziona "attrezzo" e rinomina come "proprietario"
        identifica l'eventuale Prestito attivato in risposta alla Richiesta, con la relazione Prestito → Richiesta usata in senso inversoNella sezione Relazioni aggiungi Contenuto che usa field_richiesta - Contenuto - Relate each Contenuto with a field_richiesta set to the content item e rinomina come "prestito"
        limita la visualizzazione delle Richieste al ProprietarioNella sezione Criteri del Filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si
        limita la Vista alle sole Richieste aperte (cioè senza Prestito o con Prestito senza data di restituzione)Nella sezione Criteri del Filtro aggiungi Restituzione (field_restituzione) - Contenuto - Appare in: prestito, come Relazione seleziona "prestito" e come operatore seleziona è vuoto
        mostra le informazioni relative a Richieste, Richiedente e PrestitoNella sezione Campi aggiungi Creato il e cambia Etichetta in "Data"; cambia Etichetta del Campo titolo (presente per default) in "Richiesta"; aggiungi un altro Campo "titolo", come Relazione seleziona "Prestito" e cambia Etichetta in "Prestito"; aggiungi il Campo "Consegna", come Relazione seleziona "Prestito" e seleziona un formato adeguato di data. Non mostriamo l'Attrezzo (perché siamo già nella pagina dell'Attrezzo) né il nome del Proprietario (perché è l'Utente che sta guardando la Vista). 
        ordina le Richieste in ordine di data di richiestaNella sezione Criteri di ordinamento, aggiungi Creato il - Contenuto - The date and time that the content was created e seleziona ordine ascendente
        Mostra istruzioni all'UtenteNella sezione Intestazione aggiungi Area di testo - Globale - Provide markup for the area using any available text format e come Contenuto digita "<h3>Richieste aperte sull'Attrezzo</h3>Clicca sulla Richiesta per vederne i dettagli ed eventualmente attivare un Prestito"

        Posizionare la EVA nella pagina

        Ogni EVA è come se fosse un Campo aggiuntivo dell'Entità, il cui contenuto viene ricalcolato ogni volta che si richiama la pagina. Può quindi essere posizionato a piacere nella pagina dell'Entità, come abbiamo già visto per i Campi veri e propri: 

        • In Struttura - Tipo di Contenuto - Attrezzo - Gestione visualizzazione trascina i "campi" EVA nell'ordine desiderato (es. "Dati Attrezzo" prima delle altre due) e salva.
      • Passare informazioni tra pagine

        In questa Guida vediamo come passare informazioni tra le pagine della app, in particolare come passare attraverso un link:

        • uno o più valori alla pagina di inserimento o modifica di una Entità per precaricarne i Campi, esemplificato al caso della pagina di creazione di una nuova Richiesta
        • uno o più valori ad una Vista, per filtrare le Entità elencate, esemplificato al caso della pagina che elenca i Prestiti conclusi effettuati dall'Utente corrente su uno specifico Attrezzo

        Precaricare Campi di una Entità attraverso un link

        In molte situazioni è utile precaricare attraverso un link uno o più Campi di una nuova Entità, per evitare all'Utente di selezionare nuovamente valori già noti dal contesto. Ad esempio, vogliamo che il comando "Chiedi in prestito questo Attrezzo" lanciato dalla pagina di un Attrezzo A precarichi nella nuova Richiesta il Campo "Attrezzo" con l'identificativo dell'Attrezzo A.  

        Nella app di esempio questa tecnica è utile no solo nella creazione di una nuova Richiesta (che eredita l'identificativo dell'Attrezzo richiesto) ma anche nella creazione di un nuovo Prestito (che eredita l'identificativo della Richiesta cui risponde) e di un nuovo Messaggio (che eredita la Richiesta cui si riferisce).

         

        Ciò è reso possibile dal modulo aggiuntivo Entity Prepopulate che quindi deve essere installato ed attivato. 

        Attivato il modulo, servono due passaggi:

        1. configurare il Campo "Attrezzo" delle Richieste a ricevere un valore dal link
        2. configurare il link perché trasmetta quel valore

        Per configurare il Campo:

        • vai in Struttura - Tipi di contenuto - Richiesta - Gestisci Campi - Attrezzo - Modifica
        • nella sezione Entity Prepopulate scrivi il Token [current-page:query:attrezzo]

        Il Token [current-page:query:attrezzo] dice a Drupal di prelevare dal link ("query") della pagina corrente ("current_page") il valore associato all'argomento "attrezzo". Come sempre, non è necessario ricordare questo Token a memoria, perché è tra quelli consultabili dalla pagina di configurazione del Campo.

        Predisposto il Campo "Attrezzo" della nuova Richiesta a ricevere il valore dell'argomento "attrezzo" scritto nel link, come già abbiamo visto in una Guida precedente costruiamo nella pagina dell'Attrezzo il comando "Chiedi in prestito questo Attrezzo" che corrisponde al link:

        /node/add/richiesta?attrezzo={{ raw_arguments.nid }}

        dove il Token contiene l'identificativo dell'Attrezzo.

        Se dobbiamo passare ad una pagina di inserimento di una Entità due o più valori, destinati ad altrettanti Campi, il link diventa:

        /node/add/richiesta?argomento1=valore1&argomento2=valore2&argomento3=valore3

        Il carattere ? inizia l'elenco delle coppie argomento/valore, il carattere = associa l'argomento al suo valore ed il carattere & separa le diverse coppie tra loro

        Filtrare una Vista attraverso il link: i Filtri contestuali

        Un altro caso molto frequente nella costruzione di una app è filtrare l'elenco delle Entità di una Vista con valori scritti nel link di richiamo della Vista. 

        Ad ognuno dei valori scritti nel link deve corrispondere un Filtro contestuale, cioè un Filtro scritto nella sezione Filtri contestuali della Vista, anziché nella sezione Criteri del filtro. Mentre un Filtro scritto nella sezione Criteri del Filtro prende il valore di confronto dalla configurazione stessa della Vista (Filtro "nascosto") o lo chiede all'Utente (Filtro esposto), un Filtro contestuale prende il valore dal link on cui viene richiamata la Vista. I valori devono essere scritti nel link nel medesimo ordine con cui i corrispondenti Filtri sono elencati nella sezione Filtri contestuali.

        Applichiamo questo metodo generale al caso della Vista "Miei Prestiti conclusi" che, come si vede in figura, viene utilizzata due volte nella app di esempio: se richiamata dal Cruscotto, elenca tutti i Prestiti dell'Utente conclusi; se richiamata dalla pagina di un Attrezzo, elenca tutti i Prestiti dell'Utente conclusi su quell'Attrezzo. La Vista è la stessa in entrambi i casi, ma nel secondo caso deve essere filtrata passando alla Vista l'identificativo dell'Attrezzo. 

        Costruiamo la Vista "Miei Prestiti Conclusi" che elenca tutti i Prestiti effettuati dall'Utente corrente e conclusi.

        per creare la VistaVai in Struttura - Viste - Aggiungi nuova vista  e scegli il nome della vista ("Miei Prestiti Conclusi"); in Mostra scegli contenuto di tipo "Prestito"; scegli di creare una Pagina e di mostrare il risultato come Tabella
        per impostare il link di richiamo della VistaNella sezione Impostazione pagina come Percorso digita "miei-prestiti-conclusi"
        per identificare la Richiesta cui il Prestito risponde (Prestito → Richiesta)Nella sezione Relazioni aggiungi Contenuto referenziato da field_richiesta - Contenuto - Appare in: prestito e rinomina come "richiesta"
        per identificare il Richiedente (Richiesta → Autore)Nella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto, come Relazione seleziona "richiesta" e rinomina come "richiedente"
        per identificare l'Attrezzo prestato (Richiesta → Attrezzo)Nella sezione Relazioni aggiungi Contenuto referenziato da field_attrezzo - Contenuto - Appare in: richiesta, come Relazione seleziona "richiesta" e rinomina come "attrezzo"
        per identificare il Proprietario dell'Attrezzo (Attrezzo → Autore)Nella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto, come Relazione seleziona "attrezzo" e rinomina come "proprietario"
        per limitare la Vista ai soli Prestiti relativi ad un Attrezzo, se specificato nel link di richiamo della VistaNella sezione Filtri contestuali aggiungi ID - Contenuto e come Relazione seleziona "attrezzo"; come Quando il valore del filtro NON è nell'URL seleziona Mostra tutti i risultati per il campo specifico
        per limitare la Vista ai soli Prestiti conclusiNella sezione Criteri del filtro aggiungi Restituzione (field_restituzione) - Contenuto - Appare in: prestito. e come operatore seleziona non è vuoto
        per limitare la Vista ai soli Prestiti effettuati dal Proprietario dell'AttrezzoNella sezione Criteri del filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si
        per mostrare le informazioni relative a Prestiti, Richieste, Attrezzi e Richiedenti e predisporre la ricerca nella VistaNella sezione Campi cambia l'etichetta del Campo "titolo" in "Prestito"; aggiungi i Campi "Consegna" e "Restituzione"; aggiungi "titolo", come Relazione seleziona "richiesta" e cambia etichetta in "Richiesta"; aggiungi "nome", come Relazione seleziona "richiedente" e cambia etichetta in "Richiedente"; aggiungi "titolo", come Relazione seleziona "attrezzo" e cambia etichetta in "Attrezzo";  aggiungi il Campo "Nota" e nascondilo; aggiungi il Campo "Nota", come Relazione seleziona "richiesta" e nascondilo
        per offrire la funzione di ricerca nella VistaNella sezione Criteri del filtro aggiungi Combina filtri dei campi, attiva Esponi questo filtro, come operatore seleziona Contiene ogni parola, in Scegli i campi da combinare per il filtraggio seleziona tutti i Campi elencati

        Il comando "Prestiti conclusi sull'Attrezzo" presente nella pagina dell'Attrezzo richiama quindi questa Vista col link:

        /miei-prestiti-conclusi/{{ raw_arguments.nid }}

        dove il Token {{ raw_arguments.nid }} contiene l'identificativo dell'Attrezzo., che viene utilizzato dal Filtro contestuale per limitare la Vista ai soli Prestiti conclusi che si riferiscono a quell'Attrezzo. 

        Il comando "Miei Prestiti conclusi" presente nel Cruscotto richiama la Vista senza specificare un Attrezzo:

        /miei-prestiti-conclusi

        così che la Vista elenchi tutti i Prestiti conclusi dell'Utente corrente su tutti i suoi Attrezzi.

        Se una Vista ha più di un Filtro contestuale, per passarle i corrispondenti valori verrà richiamata col link:

        /pagina_della_vista/argomento1/argomento2/argomento3

        dove il carattere / separa il percorso della Vista dagli argomenti e gli argomenti tra loro.

      • Viste con combinazioni di Filtri

        In questa Guida proseguiamo la costruzione della app di esempio, concentrandoci per motivi didattici sulla pagina "Richiesta" che mostra le informazioni relativa ad una Richiesta, all'eventuale Prestito attivato in risposta ad essa ed i Messaggi scambiati tra Richiedente e Proprietario dell'Attrezzo. Con le stesse tecniche qui spiegate si può proteggere anche la pagina "Messaggio" e la pagina "Prestito". Queste pagine hanno in comune il fatto che devono mostrare i loro contenuti sia al Richiedente sia al Proprietario, escludendo però tutti gli altri Utenti.

        Usare le Viste per proteggere le informazioni

        Rinviando ad una futura Guida soluzioni più sofisticate per la protezione delle informazioni, per gli scopi della app di esempio nelle pagine Richiesta, Messaggio e Prestito è sufficiente: 

        1. nascondere tutti i Campi a tutti gli Utenti e
        2. mostrarli solo al Richiedente ed al Proprietario, grazie a Viste EVA.

        Come abbiamo già visto, per nascondere i Campi della Richiesta a tutti gli Utenti: 

        • vai in Struttura - Tipi di contenuto - Richiesta - Gestione visualizzazione
        • trascina tutti i Campi sotto Disattivati.  
        • Salva

        Dopo questa operazione, qualunque Utente acceda alla pagina di una qualunque Richiesta ne vedrà solo il titolo, che di per sé non "svela" nulla sul contenuto della Richiesta.

        La pagina "Richiesta" è formata da un insieme di EVA che restituiscono queste informazioni ai diversi Utenti:

        Se l'Utente è il Proprietario dell'Attrezzo richiestoSe l'Utente è il Richiedente l'AttrezzoSe è un altro Utente
        Comandi "Cruscotto" e "Presta l'Attrezzo" (EVA Comandi Richiesta Proprietario)Comando "Cruscotto" (EVA Comandi Richiesta Richiedente")(nulla)
        Dati della Richiesta, del Richiedente, dell'Attrezzo richiesto, dell'eventuale Prestito e del Proprietario dell'Attrezzo (EVA Dati Richiesta)
        Messaggi scambiati tra Richiedente e Proprietario sulla Richiesta (EVA Messaggi Richiesta)

        Comando "Scrivi Messaggio" (EVA Comandi Messaggi Richiesta) 

        EVA COMANDI RICHIESTA PROPRIETARIO

        La EVA "Comandi Richiesta Proprietario", che mostra al Proprietario i comandi "Cruscotto" e "Presta l'Attrezzo" è facilmente costruibile con le tecniche che abbiamo già visto nelle Guide precedente:

        crea la EVAvai in Struttura - Viste - Aggiungi nuova vista;  scegli il nome della Vista ("Comandi Richiesta Proprietario");  in Mostra scegli contenuto di tipo "Richiesta"; scegli di creare una Pagina e di mostrare il risultato come Elenco non formattato di campi. Nella sezione Visualizzazioni cliccare Aggiungi - EVA
        aggancia la EVA alla pagina della RichiestaNella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Richiesta"
        passa alla EVA l'identificativo della RichiestaNella sezione Filtri contestuali aggiungi ID - Contenuto
        identifica l'Attrezzo richiesto, con la relazione Richiesta → AttrezzoNella sezione Relazioni  aggiungi  Contenuto referenziato da field_attrezzo- Contenuto - Appare in: richiesta e rinomina come "attrezzo"
        identifica il Proprietario dell'Attrezzo, con la relazione Attrezzo → AutoreNella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto, come Relazione seleziona "attrezzo" e rinomina come "proprietario"
        identifica l'eventuale Prestito effettuato sulla Richiesta, con la relazione Prestito → Richiesta,  usata in senso inversoNella sezione Relazioni aggiungi Contenuto che usa field_richiesta - Contenuto - Relate each Contenuto with a field_richiesta set to the content item e rinomina come "prestito"
        limita la visualizzazione del comando al ProprietarioNella sezione Criteri del Filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si
        mostra il comando "Presta questo attrezzo" Nella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Presta questo Attrezzo", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/node/add/prestito?richiesta={{ raw_arguments.nid }}" e come Classe del link digita "btn btn-primary"
        mostra il comando "Cruscotto" Nella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Cruscotto", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/cruscotto" e come Classe del link digita "btn btn-primary"

        In realtà, così costruita, la Vista mostra il comando "Presta questo Attrezzo" anche se sulla Richiesta è già stato aperto un Prestito. Per motivi didattici sistemeremo questo aspetto nella prossima Guida.

        EVA COMANDI RICHIESTA PROPRIETARIO

        Questa Vista è costruibile come variazione della precedente, eliminando il comando "Presta questo Attrezzo" e filtrando per Richiedente e non per Proprietario.

        Combinazioni di Filtri

        EVA DATI RICHIESTA

        La EVA "Dati Richiesta" che mostra i dati della Richiesta come Flipped  Table è facilmente costruibile in analogia alla EVA "Dati Attrezzo" che abbiamo già visto. Rispetto alle Viste fin qui esaminate, presenta però una complicazione, perché deve essere vista sia dal Richiedente sia dal Proprietario e solo da loro

        Se ci limitassimo ad aggiungere alla EVA un Filtro che la limita al Richiedente ed un Filtro che la limita al Proprietario, in realtà nessuno vedrebbe la EVA, perché i Filtri sono per default considerati in AND logico tra loro, quindi il contenuto della Vista sarebbe visto da un ipotetico Utente che fosse contemporaneamente Richiedente e Proprietario. Ma nella nostra app il Richiedente non coincide mai col Proprietario. 

        Perché la EVA funzioni col Richiedente e col Proprietario escludendo tutti gli altri Utenti, i due Filtri devono essere posti in OR logico tra loro, in modo che le informazioni siano mostrate se almeno uno dei due Filtri è soddisfatto. 

        Cosa significa AND e OR ?

        Dati due Filtri A e B, la loro combinazione A AND B è soddisfatta solo se entrambi sono soddisfatti. Quindi:

        • A non soddisfatto, B non soddisfatto: A AND B non soddisfatto
        • A non soddisfatto, B soddisfatto: A AND B non soddisfatto
        • A soddisfatto, B non soddisfatto: A AND B non soddisfatto
        • A soddisfatto, B soddisfatto: A AND B soddisfatto

        Nel nostro esempio, la combinazione "Proprietario=si" AND "Richiedente=si" non è mai soddisfatta perché non c'è nessun Utente che sia Proprietario e Richiedente.

        La combinazione A OR B è soddisfatta se almeno uno dei Filtri è soddisfatto. Quindi:

        • A non soddisfatto, B non soddisfatto: A OR B non soddisfatto
        • A non soddisfatto, B soddisfatto: A OR B soddisfatto
        • A soddisfatto, B non soddisfatto: A OR B soddisfatto
        • A soddisfatto, B soddisfatto: A OR B soddisfatto

        Nel nostro esempio, la combinazione "Proprietario=si" OR "Richiedente=si" è soddisfatta se l'Utente è il Proprietario oppure se l'Utente è il Richiedente. Non è soddisfatta per tutti gli Utenti che non sono né il Proprietario né il Richiedente.

        Ecco come mettere due Filtri in OR tra loro nella sezione Criteri del Filtro:

        • aggiungi il Filtro "Proprietario=si" sull'Utente corrente
        • aggiungi il Filtro "Richiedente=si" sull'Utente corrente
        • clicca And/Or Arrange
        • clicca Crea un nuovo gruppo di filtri
        • per il nuovo gruppo di filtri seleziona come operatore O (=OR)
        • trascina i due Filtri nel nuovo gruppo
        • clicca Applica. Controlla che i due Filtri siano raggruppati a parte, in OR tra loro ed in AND con gli altri Filtri:

        EVA MESSAGGI RICHIESTA

        Questi Filtri in OR servono anche nella EVA "Messaggi Richiesta". Questa Vista gestisce i Messaggi scambiati tra Proprietario e Richiedente sulla Richiesta. Come la precedente, anche questa Vista deve essere mostrata al Richiedente ed al Proprietario e nascosta a tutti gli altri Utenti.

        APPROFONDIMENTO: Per la discussione tra Utenti, solitamente in Drupal si utilizzano i Commenti. I Commenti sono Entità associate ad una Entità oggetto della discussione. Nel nostro caso, per consentire a Proprietario e Richiedente di discutere i dettagli relativi ad una Richiesta, basterebbe aggiungere al Tipo di Contenuto "Richiesta" un Campo di tipo "Commento" e magicamente nella pagina di ogni Richiesta apparirebbero i comandi per aggiungervi un commento, rispondere ad un commento precedente e l'elenco dei commenti finora arrivati.

        Nella app di esempio non sfruttiamo questa soluzione, perché qualunque Utente che vede la Richiesta potrebbe anche pubblicarvi Commenti, mentre noi vogliamo che la discussione sia riservata al Proprietario ed al Richiedente.  E fin qui non abbiamo attivato meccanismi di protezione avanzata delle Entità, ma ci siamo limitati per semplicità a nascondere agli Utenti diversi dal Proprietario e dal Richiedente i Campi della Richiesta, ma non la Richiesta in sé.

        Poiché la discussione tra Proprietario e Richiedente è breve e semplice, riguardando presumibilmente solo i dettagli sul periodo di prestito e sulle modalità di consegna e restituzione, possiamo realizzarla con un Tipo di Contenuto "Messaggio", anch'esso protetto da sguardi altrui con lo stesso metodo usato per Richiesta e Prestito.   

         Ecco come costruirla:

        crea la EVAvai in Struttura - Viste - Aggiungi nuova vista;  scegli il nome della Vista ("Messaggi Richiesta");  in Mostra scegli contenuto di tipo "Messaggio"; scegli di creare una Pagina e di mostrare il risultato come Elenco non formattato di campi. Nella sezione Visualizzazioni cliccare Aggiungi - EVA
        aggancia la EVA alla pagina della RichiestaNella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Richiesta"
        passa alla EVA l'identificativo della RichiestaNella sezione Filtri contestuali aggiungi ID - Contenuto
        identifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autoreidentifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autore
        identifica l'Attrezzo richiesto, con la relazione Richiesta → AttrezzoNella sezione Relazioni  aggiungi  Contenuto referenziato da field_attrezzo- Contenuto - Appare in: richiesta e rinomina come "attrezzo"
        identifica il Proprietario dell'Attrezzo, con la relazione Attrezzo → AutoreNella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto, come Relazione seleziona "attrezzo" e rinomina come "proprietario"
        limita la visualizzazione dei Messaggi al Proprietario ed al RichiedenteNella sezione Criteri del Filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si; aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "richiedente", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si. Metti in OR tra loro questi due Filtri, come spiegato sopra.
        mostra per ogni Messaggio il nome del mittente, la data e ora dell'invio, il testo e gli eventuali allegatiNella sezione Campi aggiungi Utente - Contenuto - Nome utente dell'autore del contenuto. Aggiungi Creato il. Testo e Allegati.  
        ordina i Messaggi per data e oraNella sezione Criteri di ordinamento aggiungi Creato il e seleziona l'ordinamento ascendente.

        EVA COMANDI MESSAGGI RICHIESTA

        Questa Vista mostra nella pagina della Richiesta il comando "Scrivi Messaggio" solo al Proprietario ed al Richiedente. Questo comando non può essere aggiunto come un link nella sezione Piè di pagina della EVA "Messaggi Richiesta" perché, dovendo essere mostrato anche in assenza di Messaggi, verrebbe mostrato anche a Utenti diversi dal Proprietario e dal Richiedente.  Questa EVA può essere facilmente costruita con le tecniche già viste:

        predisponi il nuovo Messaggio a ricevere l'identificativo della Richiesta dal comandovai in Struttura - Tipi di contenuto - Messaggio - Gestisci Campi - Richiesta - Modifica. Nella sezione Entity Prepopulate scrivi il Token [current-page:query:richiesta]
        crea la EVAvai in Struttura - Viste - Aggiungi nuova vista;  scegli il nome della Vista ("Comandi Messaggi Richiesta");  in Mostra scegli contenuto di tipo "Richiesta"; scegli di creare una Pagina e di mostrare il risultato come Elenco non formattato di campi. Nella sezione Visualizzazioni cliccare Aggiungi - EVA
        aggancia la EVA alla pagina della RichiestaNella sezione Entity content settings, come Tipo di Entità seleziona Contenuto e come Bundle seleziona "Richiesta"
        passa alla EVA l'identificativo della RichiestaNella sezione Filtri contestuali aggiungi ID - Contenuto
        identifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autoreidentifica il Richiedente dell'Attrezzo, con la relazione Richiesta → Autore
        identifica l'Attrezzo richiesto, con la relazione Richiesta → AttrezzoNella sezione Relazioni  aggiungi  Contenuto referenziato da field_attrezzo- Contenuto - Appare in: richiesta e rinomina come "attrezzo"
        identifica il Proprietario dell'Attrezzo, con la relazione Attrezzo → AutoreNella sezione Relazioni aggiungi Utente - Contenuto- Nome utente dell'autore del contenuto, come Relazione seleziona "attrezzo" e rinomina come "proprietario"
        limita la visualizzazione dei Messaggi al Proprietario ed al RichiedenteNella sezione Criteri del Filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si; aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "richiedente", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si. Metti in OR tra loro questi due Filtri, come spiegato sopra.
        mostra il comando "Scrivi Messaggio"Nella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Scrivi Messaggio", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/node/add/messaggio?richiesta={{ raw_arguments.nid }}" e come Classe del link digita "btn btn-primary"

        Per completare la gestione dei Prestiti e dei Messaggi, è necessario proteggere la pagina del singolo Messaggio dallo sguardo di Utenti diversi dal Proprietario e dal Richiedente  come abbiamo fatto qui con la pagina della Richiesta:

        Nascondi i Campi del Messaggio a tutti gli UtentiIn Struttura - Tipi di contenuto - Messaggio - Visualizzazione sposta tutti i Campi sotto Nascosto
        Mostra i Campi ai soli Proprietario e RichiedenteCrea una EVA 'Dati Messaggio" che mostra come Flipped Table i campi del Messaggio col filtro in OR su Proprietario e Richiedente. Il Campo "Richiesta" del Messaggio consente3 di tornare alla Richiesta.

        Le stesse attività devono essere applicate anche al Tipo di contenuto "Prestito".

      • Campi condizionati nelle Viste

        Campi condizionati

        Oltre ai Filtri (esposti, nascosti, contestuali) illustrati nelle Guide precedenti, esistono altri metodi in Drupal per alterare il risultato mostrato da una Vista. In particolare, in questa Guida vediamo come modificare la visualizzazione dei Campi di una Vista in base al valore degli altri Campi, grazie ai Campi "condizionati". Mentre i Filtri intervengono sulle "righe" della Vista selezionando quali Entità mostrare, i Campi condizionati intervengono sulle "colonne" della Vista selezionando quali dati mostrare di ogni singola Entità in base al valore di altri Campi dell'Entità stessa. 

        Per utilizzare i Campi condizionati è necessario installare ed attivare il modulo aggiuntivo "Views Conditional", che aggiunge il nuovo tipo di Campo Views Conditional - Viste - Output data based off of certain criteria .

        Quando si aggiunge un Campo condizionato nella sezione Campi della Vista, devi specificarne i seguenti parametri:

        if this fieldSeleziona il Campo "condizionante" il cui valore stabilisce cosa mostrare nel Campo condizionato. Sono selezionabili tutti i Campi che precedono il Campo condizionato nell'elenco dei Campi, es. il Campo "Prezzo", che contiene il prezzo di una Entità
        Is...Seleziona l'Operatore da applicare al valore del Campo condizionante: "vuoto", "non vuoto", "maggiore di", "inizia per" ecc. 
        This valueDigita il Valore da confrontare col valore del Campo condizionante.  Puoi digitare un valore fisso (es. "1000") oppure un Token corrispondente ad uno dei Campi che precedono il Campo condizionato. I Token disponibili sono elencati sotto Replacement Variables
        Then output this

        Digita il valore assegnato al Campo condizionato se la condizione formata dal valore del Campo condizionante + Operatore + valore da confrontare è VERA

        Es. se il Campo "Prezzo" ha valore "2000", Operatore è "maggiore di" e il valore da confrontare è "1000", nel Campo condizionato appare è il valore scritto nel parametro Then output this , es. "prezzo elevato". 

        In questo parametro puoi anche digitare un mix di valori fissi e Token, es. "prezzo elevato, pari a {{ field_prezzo }}", che verrà mostrato come "prezzo elevato, pari a 2000".

        Otherwise output thisDigita il valore assegnato al Campo condizionato se la condizione formata dal valore del Campo condizionante + Operatore + valore da confrontare è FALSA, es. "prezzo nella norma". 

        Il risultato di un Campo condizionato così impostato è il seguente:

        Campo "Fornitore"Campo "Prezzo"(nascosto)Campo "Valutazione" condizionato
        Rossi Srl1200Prezzo elevato, pari a 1200 euro
        Bianchi & Figli960Prezzo nella norma, pari a 960

        Esempio di utilizzo 

        Nella Guida precedente avevamo costruito la Vista EVA "Comandi Richiesta Proprietario" che mostra al solo Proprietario dell'Attrezzo nella pagina della Richiesta i comandi "Cruscotto" e "Presta questo Attrezzo". Avevamo lasciato in sospeso il problema di non mostrare il comando "Presta questo Attrezzo" se esiste già un Prestito associato alla Richiesta. Il problema poteva essere risolto spezzando la Vista in due Viste: una che mostra il comando "Miei Attrezzi" filtrata solo sul Proprietario e un'altra che mostra il comando "Presta questo Attrezzo" filtrata sul Proprietario e sulla inesistenza del Prestito associato alla Richiesta. 

        Per evitare di avere due Viste, coi conseguenti problemi di allineamento visivo tra i due comandi e per motivi didattici, vediamo come risolvere il problema con una sola Vista usando i Campi condizionati. Ecco come modificare la sezione Campi della Vista "Comandi Richiesta Proprietario":

        Aidentifica l'eventuale Prestito associato alla Richiesta e nascondiloNella sezione Campi aggiungi Titolo - Contenuto e in Relazione seleziona "Prestito". Attiva Escludi dalla visualizzazione 
        Bpredisponi il comando "Presta questo Attrezzo" e nascondiloNella sezione Campi aggiungi Testo personalizzato - Globale - Fornisce testo o link personalizzato, come Testo digita "Presta questo Attrezzo", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato, come Percorso del link digita "/node/add/prestito?richiesta={{ raw_arguments.nid }}" e come Classe del link digita "btn btn-primary". Attiva Escludi dalla visualizzazione
        Cse il Prestito non esiste mostra il comando "Presta questo Attrezzo"

        Nella sezione Campi aggiungi  Views Conditional - Viste - Output data based off of certain criteria.

        Se il titolo del Prestito (contenuto nel Campo A) è vuoto e quindi il Prestito non è stato ancora concesso, mostra qui il contenuto del Campo B, che contiene il comando "Presta questo attrezzo" col suo link e che corrisponde al Token {{ nothing }} elencato in Replacement Variables).  Se invece il titolo del Prestito non è vuoto e quindi il Prestito è stato concesso, non mostrare nulla. Ecco come si traduce nei parametri del Campo C condizionato: 

        Come if this field seleziona (Prestito) Contenuto - Titolo. Come Is seleziona Empty. Come This value non scrivere nulla. Come Then output this digita {{ nothing }}. Come Otherwise output this non digitare nulla

        Concatenazione di Campi condizionati

        Per gestire casi più complessi, è possibile concatenare più Campi condizionati. Poiché un Campo condizionato è trattato da Drupal esattamente come i Campi "nativi" delle Entità gestite nella Vista, anche al Campo condizionato corrisponde un Token di nome {{ views_conditional_field }}, che può essere utilizzato come parametro nella impostazione di un secondo Campo condizionato, il cui valore dipenderà quindi dal valore del primo Campo condizionato.  La concatenazione può estendersi a tre o più Campi condizionati, il cui Token sarà {{ views_conditional_field }}, {{ views_conditional_field_1 }}, {{ views_conditional_field_2 }} ecc.

      • Calcoli nella Viste

        Se nella app hai bisogno di svolgere calcoli basati sui valori dei Campi delle Entità, puoi farlo con le Viste. Distinguiamo due casi diversi:

        EsigenzaEsempio
        Calcolare un valore da attribuire ad una Entità, partendo da valori contenuti nel Campi dell'Entità (o nei Campi di Entità in relazione con l'Entità) e mostrarlo nella Vista a fianco dell'EntitàCalcolare il prezzo di una cassetta di frutta venduta a peso, moltiplicando il prezzo al kg del tipo di frutta per il peso della cassetta.  
        Calcolare un valore partendo dall'insieme dei valori di un Campo delle Entità elencate nella Vista e mostrarlo in fondo alla VistaCalcolare la media dei prezzi degli oggetti elencati

        Campi calcolati in base ad altri Campi

        La prima esigenza sopra indicata può essere risolta installando ed attivando il modulo aggiuntivo "Views Simple Math Field" che aggiunge alle Viste il Campo Simple Math Field -  Globale - Views field that performs simple math expressions. Nella configurazione di questo Campo è possibile scrivere una formula che calcola un valore sulla base del valore degli altri Campi presenti nella Vista. Nella formula si possono inserire operatori matematici, logici e di confronto ed altre operazioni complesse. 

        Riprendendo l'esempio sopra citato, data l'Entità "Cassetta" con un Campo "Peso", che memorizza il peso in kg della frutta contenuta nella cassetta ed un Campo "Tipo di Frutta", che punta ad una Entità di tipo "Frutta" che ha un Campo "Prezzo al kg", se si elencano nella Vista i Campi "Peso" e "(Tipo d Frutta) Prezzo al kg" possiamo aggiungere un Campo di tipo Simple Math in cui scrivere la formula Peso * Prezzo_al_kg

        Come esempio didattico, vediamo come aggiungere alla Vista "Miei Prestiti conclusi" della app di esempio che elenca i Prestiti su Attrezzi dell'Utente corrente un Campo che mostra la durata in giorni del prestito effettuato, calcolato come differenza tra la data di consegna dell'Attrezzo al Richiedente e la data di restituzione dell'Attrezzo al Proprietario. Diversamente dal precedente esempio che si limitava a moltiplicare due numeri, in questo esempio vediamo anche un metodo per calcolare la differenza in giorni tra due date.

        aggiungi alla Vista il Campo "Consegna" in un formato utile al calcolonella sezione Campi esiste già un Campo "Consegna", mostrato all'Utente nel formato leggibile "giorno mese anno". Questo formato però non è adatto per calcolare la differenza tra date. Aggiungi quindi nella sezione Campi una seconda copia del Campo "Consegna", come Formattatore seleziona Personalizzato e come Formato data/ora digita "U". Il formato "U" rappresenta la data come numero di secondi passati da una data fissa (1 gennaio 1970; per una spiegazione di questo riferimento temporale vedi Tempo (Unix) su Wikipedia). L'elenco completo dei formati possibili per le date è nella apposita pagina del Manuale PHP . Nascondi il Campo, perché non serve all'Utente ma al calcolo.
        aggiungi alla Vista il Campo "Restituzione" nello stesso formatonella sezione Campi esiste già un Campo "Restituzione", mostrato all'Utente nel formato leggibile "giorno mese anno". Per lo stesso motivo sopra spiegato, nella sezione Campi aggiungi una seconda copia anche del Campo "Restituzione", come Formattatore selezione Personalizzato e come Formato data/ora digita "U". Nascondi il Campo. 
        aggiungi alla Vista un Campo di tipo Simple Mathnella sezione Campi della Vista aggiungi il Campo Simple Math Field -  Globale - Views field that performs simple math expressions e come Etichetta digita "Durata"
        predisponi il Campo ad usare i valori dei Campi "Consegna" e "Restituzione" per il calcolonell'elenco Select the fields to use in the formula della configurazione del Campo seleziona i Campi "Consegna" e "Restituzione". a questi Campi corrispondono i Token (anch'essi elencati) "@field_restituzione_1" e  "@field_consegna_1" (il _1 in fondo al nome del Token è dovuto al fatto che la Vista conteneva già un Campo "Consegna" ed un Campo "Restituzione").
        scrivi nel Campo la formula che calcola la differenza in giorni

        In Formula digita 

        (@field_restituzione_1 - @field_consegna_1) / 86400 +1

        La formula è piuttosto intuitiva: dentro la parentesi viene calcolata la differenza in secondi tra la data di fine prestito e la data di inizio prestito; il risultato viene poi diviso per il numero di secondi in un giorno. Alla differenza in giorni la formula aggiunge 1 giorno per evitare di mostrare 0 nel caso un prestito inizi e finisca nella stessa data. 

        Sempre nella configurazione del Campo, attiva l'opzione Arrotonda scegliendo zero numeri dopo la virgola, per mostrare un numero intero di giorni.

         

        ATTENZIONE:  Se nella Formula si utilizza un Token presente in Select the fields to use in the formula ma non selezionato, la Vista può andare in errore. Per rimediare, basta tornare nell'editor della Vista ed attivare il flag a fianco del Token.

        Poiché un Campo di tipo Simple Math è trattato come un qualunque altro Campo, anche ad esso corrisponde un Token  - di nome {{ field_views_simple_math_field }} - che ne contiene il valore calcolato e che può essere a sua volta usato nei Campi successivi, tra cui ci possono essere altri Campi Simple Math.

        Il valore calcolato in un Campo Simple Math è mostrato all'Utente, ma non salvato nella Entità, quindi non è disponibile al di fuori della Vista. Per salvare in un Campo dell'Entità un valore calcolato in base agli altri Campi dell'Entità stessa ci sono due modi, che richiedono altri moduli aggiuntivi:

        • aggiungere all'Entità un Campo di tipo Computed, messo a disposizione dal modulo "Computed Field", che però richiede di programmare in PHP e che quindi esula dagli scopi di MieApp.
        • disegnare col modulo "ECA" una procedura che, al salvataggio di una Entità, esegua un calcolo usando i Campi dell'Entità stessa e scriva il risultato in un ulteriore Campo dell'Entità. Questo metodo evita di dover programmare in PHP e sarà spiegato nella sezione Automazioni di MieApp  

        Aggregare valori di un Campo delle Entità elencate 

        Se invece si vuole calcolare un valore calcolato come aggregazione di un Campo delle Entità elencate, ad esempio il prezzo medio (o il peso medio) delle Cassette di frutta, occorre installare e attivare il modulo aggiuntivo "Views Aggregator Plus". 

        Questo potente modulo consente di modificare in modo significativo una Vista, però in questo primo esempio ci limitiamo a sfruttarne la capacità di aggiungere in fondo alla Vista "Miei Prestiti Conclusi" sopra descritta la media della durata dei Prestiti effettuati: 

        attiva l'aggregazione nelle due Visualizzazioni presenti nella Vista ("Mie Prestiti Conclusi" e "Prestiti conclusi sull'Attrezzo")nella sezione Formato della Vista seleziona Table with aggregation options
        attiva sul Campo "Durata" il calcolo della medianella sezione Formato della Vista, sotto Impostazioni identifica il Campo Durata, attiva  Apply column function e seleziona Median

         

      • Aggregazioni di Viste

        Nelle Guide precedenti abbiamo visto come assemblare una o più Viste (di tipo EVA) nella pagina di una Entità. Vediamo ora invece come assemblare più Viste dentro una semplice pagina di testo o dentro una Vista principale. Esemplifichiamo entrambi i metodi per costruire il Cruscotto messo a disposizione degli Utenti della nostra app di esempio

        Il Cruscotto

        La nostra app di esempio prevede una pagina "Cruscotto" che mostra all'Utente le informazioni ed i comandi essenziali per agire sia come Richiedente sia come Proprietario:

        Informazioni e comandi per Cosa mostra il CruscottoMostrato dalla Vista
        L'Utente in generaleIl nome dell'Utente, come link che porta al suo profilo, ad esempio per cambiare la passwordcomando_mio_profilo
        Elenco degli ultimi Messaggi inviati all'Utente da altri Utenti, relativamente a sue Richieste o a Richieste altrui sui suoi Attrezziultimi_messaggi_pervenuti
        L'Utente come Richiedente di Attrezzi altruiComando "Magazzino" che porta al Magazzino, in cui cercare Attrezzi da chiedere in prestitomie_richieste_aperte
        Elenco delle Richieste aperte dall'Utente, con l'eventuale Prestito attivato non ancora concluso

        Comando "Mie Richieste concluse" che porta all'elenco delle Richieste dell'Utente ormai concluse

        L'Utente come Proprietario di Attrezzi Comando "Miei Attrezzi" che porta all'elenco degli Attrezzi dell'Utente ed al comando per aggiungerne di buovimiei_prestiti_aperti
        Elenco delle Richieste aperte sugli Attrezzi dell'Utente, con l'eventuale Prestito concesso dall'Utente 
        Comando "Miei Prestiti conclusi" che porta all'elenco delle Richieste sugli Attrezzi dell'Utente ormai concluse

        Le Viste qui sopra elencate sono facilmente costruibili in analogia alle Viste fin qui costruite nelle precedenti Guide e non vengono qui ulteriormente spiegate. Vediamo come assemblarle in una sola pagina "Cruscotto" utilizzando due metodi alternativi, basati su due differenti moduli aggiuntivi.

        Viste in una Pagina

        Un primo metodo è basato sul modulo "Insert View", che consente di inserire una o più Vista dentro il Campo testuale di una qualunque Entità. Installato ed attivato questo modulo, per inserire una Vista in un Campo testo, basta digitare nel testo il Token

        [view:name=display=args] 

        in cui:

        • name è il nome ad uso interno della Vista, nome elencato da Struttura - Viste. E' l'unico parametro obbligatorio per questo Token.
        • display è il nome della Visualizzazione dentro la Vista, nome mostrato nella sezione Altro della Vista come Nome ad uso interno. Se la Vista ha una sola Visualizzazione, si può omettere questo parametro
        • args sono gli eventuali argomenti passati ai Filtri contestuali della Vista, separati da /. Se la Vista non prevede Filtri contestuali, su può omettere questo parametro dal Token 

        Per creare il Cruscotto della app di esempio con questo metodo:

        predisponi i Campi testo a riconoscere il Token [view]Vai in Configurazione - Formati testo e editor - Html completo - Configura e attiva Insert View
        crea la pagina "Cruscotto"Con Contenuto - Aggiungi Contenuto - Pagina base crea una Pagina; come titolo digita "Cruscotto", come Formato del testo seleziona HTML completo, come Alias URL digita "/cruscotto". 
        mostra le informazioni

        Digita nel testo della pagina i Token corrispondenti alle Viste

        [view:comando_mio_profilo] 

        [view:ultimi_messaggi_pervenuti]

        [view:mie_richieste_aperte]

        [view:miei_prestiti_aperti]

        intervallati se vuoi da testi fissi di spiegazione, immagini ecc.

        Questo metodo è semplice e consente di mescolare le informazioni fornite dalla Viste con testi fissi, immagini ecc. Se però una delle Viste richiamate necessita di valori per i propri Filtri contestuali e questi valori non sono fissi ma dipendono dal contesto in cui la pagina viene richiamata, allora quasi sicuramente occorre passare al metodo successivo.

        Viste in una Vista 

        Un secondo metodo, più potente e leggermente più complesso, è basato sul modulo "Views Field View" che consente di aggiungere ad una Vista "principale" una o più Viste "secondarie". Installato ed attivato questo modulo, per inserire nella Vista principale una Vista secondaria basta aggiungere nella sezione Campi della Vista principale il nuovo tipo di Campo Visualizza - Globale - Embed a view as a field. This can cause slow performance, so enable some caching. selezionando poi la Vista secondaria e specificando gli eventuali argomenti da passarle.

        La Vista principale può passare alle Viste secondarie qualunque valore noto nella Vista principale stessa, compresi eventuali valori a sua volta ricevuti. Si crea così una catena di Viste che richiamano Viste, che può essere profonda a piacere, ma che è opportuno limitare ad uno o due passaggi per non incorrere in rallentamenti eccessivi o in complessità tali delle interrogazioni sul database da mandare in errore la app.

        Nella app di esempio, aggiungiamo una Vista "Cruscotto" basata sull'Utente corrente (in modo da essere certi che la Vista venga mostrata anche quando l'Utente non abbia ancora emesso o ricevuto Richieste) e dentro questa Vista principale richiamiamo le Viste che mostrano le informazioni sopra elencate:

        crea la Vista "Cruscotto"vai in Struttura - Viste - Aggiungi nuova vista;  scegli il nome della Vista ("Cruscotto");  in Mostra scegli Utente; scegli di creare una Pagina e di mostrare il risultato come Elenco non formattato di campi.  
        filtra la Vista sull'Utente correnteNella sezione Criteri del filtro aggiungi Corrente - Utente- Filtra la vista con l'utente attualmente autenticato, come operatore seleziona è uguale a e come è l'utente autenticato seleziona si
        definisci il percorso con cui richiamare il CruscottoNella sezione Impostazione pagina come Percorso digita "/cruscotto"
        mostra le informazioni

        per ogni Vista sopra elencata:

        •  nella sezione Campi aggiungi Globale - Embed a view as a field. This can cause slow performance, so enable some caching
        • per un difetto attualmente presente in Drupal, conferma il Campo senza configurarlo e poi riaprilo per configurarlo
        • In Visualizza seleziona la Vista secondaria che vuoi richiamare (es "Miei Richieste aperte")
        • In Visualizzazione seleziona se necessario la specifica Visualizzazione nella Vista secondaria
        • In Filtri contestuali digita se necessario i valori da passare ai Filtri contestuali della Vista secondaria (nel nostro esempio, non ci sono). Al posto di valori fissi puoi usare i Token messi a disposizione dalla Vista principale, elencati sotto Schemi di sostituzione

         

      • Aggiornamento delle Viste e ritorni automatici

        Da scrivere usando come esempio la Vista EVA  Messaggi

      • Viste ad albero

        Nella precedente Guida abbiamo visto come creare una Vista basata sulla relazione "Attrezzo → Categoria". Grazie a quella relazione, partendo da un tipo di Entità (i Contenuti di tipo Attrezzo) la Vista mostra un altro tipo di Entità (i Termini della Tassonomia "Categoria di attrezzi"). 

        Proseguendo nella realizzazione della app di esempio, vediamo ora come costruire la Vista "Categorie di attrezzi" da mostrare agli Utenti non ancora registrati ("visitatori") per invogliarli a iscriversi alla app. 

        IL MODULO VIEWS TREE

        Come tutte le Tassonomie, le Categorie di attrezzi sono organizzate in una gerarchia, il che significa che in ogni Categoria esiste un riferimento che la lega alla Categoria superiore, ad esempio la Categoria "Falciatrice" contiene un riferimento alla Categoria "Giardinaggio". 

        Volendo rappresentare la gerarchia delle Categorie non come una tabella piatta, ci serve un formato di visualizzazione ad "albero". Questo formato non è disponibile nativamente nelle Viste, ma viene aggiunto installando in Drupal il modulo "Views Tree" (vedi questa Guida per sapere come installare un modulo).

        CREAZIONE DELLA VISTA

        Per creare e configurare la Vista "Categorie di attrezzi" procedi come per la precedente Vista: vai in Struttura - Viste - Aggiungi nuova vista, digita il nome della vista ("Categorie di attrezzi"). In Mostra seleziona "Termine di Tassonomia" di tipo "Categorie di attrezzi". Scegli di creare una "Pagina" di formato "Tree (List)". 

        IMPOSTAZIONE DELLA RELAZIONE

        Entrato nell'editor della Vista, aggiungi la relazione che lega un Termine di Tassonomia al proprio Termine superiore, che in Drupal è chiamato "genitore": nella sezione Avanzate - Relazioni clicca Aggiungi, cerca e seleziona "genitore":

        VISUALIZZAZIONE AD ALBERO

        Per usare Il formato ad albero, devi aggiungere nella sezione Campi della Vista l'identificativo dell'Entità "base" e l'identificativo dell'Entità "genitore". Per "Identificativo" si intende il codice univoco che identifica l'Entità, che nel caso dei Termini di Tassonomia è il Campo "ID Termine".  

        Aggiungi quindi il Campo "ID Termine":

        Nascondi questo Campo perché serve alla Vista per organizzare l'albero ma non serve mostrarlo all'Utente:

        Aggiungi nuovamente il Campo "ID Termine" specificando stavolta come "Relazione" la relazione "genitore":

        Nella sezione Campi hai quindi :
         

        Per evitare che, cliccando sul nome di una Categoria il visitatore possa navigare nel sito, nel Campo "Termine della tassonomia: Nome" disattiva il parametro Collegamento a Termine della tassonomia.

        Nella sezione Formato  ora puoi finalmente configurare l'albero: a fianco di "Tree (list)" clicca Impostazioni; come Main field seleziona il primo dei due Campi "ID Termine" e come Parent field il secondo dei due Campi "ID Termine" (corrispondente al termine "genitore"):

        Nella sezione Anteprima ecco apparire l'albero delle Categorie degli attrezzi:

        Se non sono in ordine alfabetico, nella sezione Criteri di ordinamento aggiungi due criteri: il primo ordina per nome del genitore del Termine ed il secondo per nome del Termine:

        Per non spezzare l'albero su più pagine, nella sezione Paginazione imponi che siano mostrate tutte le Entità in una sola pagina:

        Poiché questa Vista ha lo scopo di incentivare i visitatori a iscriversi alla app, nella sezione Intestazione aggiungi una "Area di testo" in cui scrivere un messaggio del tipo "Vorresti un attrezzo di questi in prestito gratuito? Sei disponibile a prestare gratuitamente ai tuoi vicini un tuo attrezzo?" e nella sezione Piè di pagina un'altra "Area di testo" con un testo del tipo "Per partecipare a "Buon Vicinato" clicca il comando "Accedi" per registrarti: la tua domanda sarà verificata e riceverai una mail di conferma."

        Vedremo in una prossima Guida come far diventare questa Vista la pagina di benvenuto per i visitatori.

        Puoi vedere questa Vista in azione qui e qui sotto la sua configurazione:

         

         

         

      • La cache della Vista

        Velocizzare ma in una app è un problema perché può alterare il risultato atteso.

      • Viste filtro per Campi Riferimento

        Entity view Filter o come si chiama

      • Viste con filtri su intervalli di valore

        Filtri su intervalli di valore

      • Viste per azioni collettive sulle Entità

    • Gli utenti della app

      utenti

      Ruoli

      permessi

      Cenno ai gruppi

    • Tassonomie

      arrivato qui 

      valutare se introdurre subito le tassonomie o cavarcela con tipo di contenuto gerarchico

      Nella nostra app di esempio, vogliamo catalogare gli attrezzi utilizzando Categorie predefinite dall'Amministratore, per facilitare la ricerca degli attrezzi, che potrebbero essere descritti dai proprietari in modo non uniforme. A questo scopo possiamo creare un nuovo Tipo di Contenuto ma, per etichettare Contenuti, Drupal mette a disposizione uno strumento più potente: le Tassonomie. Una Tassonomia è un vocabolario di Termini con cui etichettare i Contenuti. Solo per le Tassonomie, Drupal offre comandi speciali che facilitano la creazione di gerarchie di Termini a più livelli, ad esempio:

      • Falegnameria
        • Sega
        • Pialla
        • Levigatrice
      • Giardinaggio
        • Falciatrice
        • Troncarami
        • Idropulitrice
      • Lavori in muratura
        • Trabattello
        • Tagliapiastrelle
        • Frattazzo
      • Abbigliamento
        • Macchina per cucire
        • ...

      Poiché è difficile prevedere quanto la gerarchia di etichette si complicherà con l'uso della app, è opportuno affrontarla da subito con una Tassonomia. 

      COSTRUIRE UNA TASSONOMIA

      Come Amministratore, sotto il menù Struttura - Tassonomia trovi i comandi per creare e gestire le Tassonomie. Col comando Aggiungi vocabolario crei una nuova Tassonomia semplicemente dandole un nome (es. "Categorie di attrezzi") e caricandovi i Termini. Creata la nuova Tassonomia, puoi riordinare gerarchicamente i Termini richiamandone l'elenco col comando Lista termini e trascinandoli:

      Come i Contenuti, anche i Termini di Tassonomia hanno Campi automaticamente valorizzati da Drupal:

      CampoTipoA cosa serve
      ID Termine (o TID)numero interoidentifica univocamente il Termine di Tassonomia rispetto a tutti gli altri Termini presenti nella app
      AutoreRiferimento ad un Utenteidentifica l'Utente che ha creato il Termine di Tassonomia . Nella app di esempio, sarà sempre l'Amministratore.
      Data di creazionedataData e ora di creazione del Termine nella app
      Data di modificadataData e ora di ultima modifica del Termine nella app
      GenitoreRiferimento ad un altro Termineidentifica il Termine soprastante nella gerarchia della Tassonomia
      PesoNumero interoordine del Termine rispetto agli altri Termini con medesimo Genitore
      ProfonditàNumero interolivello di profondità del Termine nella gerarchia della Tassonomia (0 = livello più alto)

      Gli ultimi tre Campi contengono le informazioni relative alla gerarchia: quando trascini un Termine nella gerarchia della Tassonomia, Drupal ricalcola automaticamente i Campi Genitore, Peso e Profondità.

      APPLICARE LA TASSONOMIA AI CONTENUTI

      Per applicare una Tassonomia ad un Tipo di Contenuto basta aggiungere al Tipo di Contenuto un Campo Riferimento che fa riferimento a quella Tassonomia. 

      Nella app di esempio, aggiungi quindi al Tipo di Contenuto "Attrezzo" un Campo Riferimento che punta alla Tassonomia "Categorie di Attrezzi" creando così una relazione Attrezzo → Termine:

      Puoi vedere qui la struttura degli Attrezzi, aggiornata anche con questo Campo.

       

      Ad esempio, se installi il modulo "Client-side Hierarchical Select", viene aggiunto ai Campi Riferimento che fanno riferimento ad una Tassonomia un Widget che fa scegliere un Termine di primo livello, poi uno di secondo livello limitato dalla scelta effettuata nel primo e così via, consentendo così all'Utente di muoversi lungo la gerarchia mentre sta scegliendo il Termine da applicare all'attrezzo:

      PRIMA DI PROSEGUIRE

      Se la tua app richiede una Tassonomia, descrivila e popolala con un po' di termini, disponendoli su una gerarchia con un paio di livelli.

      Qui puoi trovare la struttura della Tassonomia utilizzata nella app di esempio.

    • Come muoversi nella app

      Comandi esposti ai diversi ruoli come comandi contestuali costruiti con le viste.

      Definizione dei menu

      Definizione della prima pagina per ruolo

    • Automatizzare la app

      ECA

      Cron

       

    • La grafica della app

      temi

      dove trovarli e come installarli (composer)

      configurazioni

       

       

       

    • La ricerca nella app

      oltre le viste: il motore di ricerca

       

       

       

    • Manutenzione delle app

      Operazioni di manutenzione della app

      • Importare ed esportare le informazioni

        Da scrivere, usando i moduli Feeds e Views Data Export

      • Cron

        Cos'è Cron?

        DA SCRIVERE

        Come lo eseguo?

        DA SCRIVERE

        Se Cron va in errore...

        Se il comando Configurazione - Cron - Esegui Cron dentro Drupal va in errore, puoi provare a sbloccarlo come spiegato nella Guida a Drush.

      • Backup delle app

      • Traslocare le app

      • Aggiornamento di Drupal

        Perché devo aggiornare il Core ed i moduli aggiuntivi?

        Con una buona frequenza la comunità di Drupal mette a disposizione aggiornamenti del Core e dei moduli. Gli aggiornamenti risolvono errori, aggiungono funzioni e, soprattutto, migliorano la sicurezza di Drupal. Drupal avvisa l'Amministratore quando sono disponibili aggiornamenti. In ogni momento, l'Amministratore può verificare la disponibilità di aggiornamenti sotto il menù Resoconti coi comandi Resoconto sullo stato e Aggiornamenti disponibili

        Poiché ogni aggiornamento può malauguratamente introdurre problemi e persino crash alla tua app, se nel quotidiano utilizzo della app non riscontri errori installa subito solo gli aggiornamenti di sicurezza, rinviando gli altri fino a quando la versione del modulo che stai usando non diventa incompatibile con il Core o con altri moduli installati. La pagina mostrata da Aggiornamenti disponibili fornisce le informazioni essenziali per decidere.  

        Prima di procedere ad un aggiornamento è sempre consigliato fare un backup della app, per poterla ripristinare in caso che l'aggiornamento provochi un blocco o crash della app.

        Come aggiornare Drupal?

        Come l'installazione, anche l'aggiornamento di Core e moduli non può essere effettuata dall'Amministratore dentro Drupal, ma deve essere effettuata da Terminale con Composer e Drush. Le istruzioni per aggiornare il Core all'ultima versione disponibile sono dettagliate sul sito Drupal. Le istruzioni per aggiornare un modulo sono le medesime che abbiamo già visto per la sua installazione.