Nelle Guide precedenti abbiamo visto come richiamare una o più Viste nella pagina di una Entità. Abbiamo anche visto come richiamare una Vista alternativa quando una Vista non dà alcun risultato. In questa Guida generalizziamo la costruzione di Viste complesse che richiamano altre Viste e vediamo anche come richiamare Viste dentro Campi testuali di una Entità.
Richiamare una Vista sopra o sotto l'elenco di una Vista
Data una Vista che elenca Entità di un certo tipo (Vista "primaria"), è possibile arricchirla richiamando sopra o sotto l'elenco una o più Viste "secondarie", anche basate su Entità differenti:
| posiziona la Vista secondaria nella intestazione della Vista primaria | Nella sezione Intestazione della Vista primaria aggiungi il Campo speciale Globale - Area della vista e seleziona la Vista secondaria |
| passa eventualmente alla Vista secondaria i valori dei Filtri contestuali ricevuti dalla Vista primaria | Attiva l'opzione Eredita filtri contestuali |
| ATTENZIONE: un limite di questo metodo è che i Filtri contestuali delle due Viste devono essere gli stessi, perché non è possibile selezionare quali Filtri passare dalla primaria alla secondaria, ma solo attivare o meno l'opzione Eredita filtri contestuali, che passa tutti i valori dei Filtri contestuali della Vista primaria all'altra. |
Per richiamare una Vista secondaria sotto l'elenco delle Entità della Vista primaria, il Campo Globale - Area della vista va aggiunto nella sezione Piè di pagina anziché nella Intestazione.
Richiamo condizionato di una Vista
E' anche possibile richiamare una Vista secondaria nella sezione Comportamento se non ci sono risultati della Vista primaria. Ciò può risultare utile per richiamare una Vista secondaria solo quando la Vista primaria non identifica nessuna Entità da mostrare.
Ad esempio, nella app "Vicinato" vogliamo evitare che l'Utente possa esprimere due volte la sua Valutazione su una Richiesta cui partecipa come Richiedente o come Proprietario dell'attrezzo. Subordineremo quindi la visualizzazione del comando "Aggiungi Valutazione" su una Richiesta all'assenza di sue Valutazioni già espresse sulla medesima Richiesta. Per far ciò costruiamo due Viste:
- una Vista EVA "Verifica Presenza Valutazione" (richiamata automaticamente nella pagina della Richiesta) che elenca le Valutazioni espresse dall'Utente corrente sulla Richiesta; nella sezione Comportamento se non ci sono risultati aggiungiamo il richiamo della Vista "Comando Aggiungi Valutazione" che sarà attivato solo se non ci sono Valutazioni da mostrare
- una Vista "Comando Aggiungi Valutazione" (richiamata dalla EVA solo se non ci sono già Valutazioni dell'Utente corrente sulla Richiesta) che riceve l'identificativo della Richiesta e mostra all'Utente il link per aggiungere la Valutazione.
Richiamare una o più Viste dentro una Vista
Un metodo più generale per presentare più Viste in una sola pagina della app consiste nel creare una Vista primaria che funge da contenitore di una o più Viste secondarie, richiamate nella sezione Campi della Vista primaria.
Questa possibilità è offerta dal modulo aggiuntivo "Views Field View". Installato ed attivato questo modulo, per richiamare dentro una Vista primaria una Vista secondaria basta aggiungere nella sezione Campi della Vista primaria il nuovo tipo di Campo Globale - Visualizza - Embed a view as a field. Nella configurazione di questo Campo si seleziona la Vista secondaria da richiamare, quale sua Visualizzazione e gli eventuali argomenti da passarle.
Come esempio, vediamo la costruzione della pagina "Cruscotto" della app "Vicinato". Questa pagina mostra all'Utente corrente un insieme di informazioni di diverso tipo che lo riguardano:
- il suo nome, come link che porta alla pagina dei suoi dati personali (es. per cambiare password)
- l'elenco dei suoi Prestiti aperti (cioè le Richieste di altri Partecipanti sui suoi Attrezzi), con un link ai suoi Prestiti conclusi e un link ai suoi Attrezzi
- l'elenco delle sue Richieste aperte (cioè le sue Richieste su Attrezzi altrui), con un link alle sue Richieste concluse e un link al Magazzino
Supponiamo di aver creato, coi metodi illustrati nelle Guide precedente, una Vista "Richieste" contenente queste Visualizzazioni:
- "Aperte Richiedente", che elenca le Richieste in stato "aperta" o "in corso" che hanno come Richiedente l'Utente corrente e che mostra nel suo Piè di pagina i comandi "Richieste concluse" e "Magazzino"
- "Aperte Proprietario", che elenca le Richieste in stato "aperta" o "in corso" che hanno come Proprietario l'Utente corrente e che mostra nel suo Piè di pagina i comandi "Prestiti conclusi" e "Tuoi Attrezzi"
- "Concluse Richiedente", che elenca le Richieste in stato "conclusa" o "annullata" che hanno come Richiedente l'Utente corrente
- "Concluse Proprietario", che elenca le Richieste in stato "conclusa" o "annullata" che hanno come Proprietario l'Utente corrente
Poiché il punto di vista del Cruscotto è l'Utente corrente, costruiamo la Vista "Cruscotto" come una Vista basata sull'Entità di tipo Utente e filtrata sull'Utente corrente. Nella sezione Campi del Cruscotto aggiungiamo:
- il Campo "nome" dell'Utente, presentato come un link alla pagina "/user" che mostra i suoi dati personali
- un Campo Globale - Visualizza che richiama la Vista "Richieste" e Visualizzazione "Aperte Proprietario"
- un Campo Globale - Visualizza che richiama la Vista "Richieste" e Visualizzazione "Aperte Richiedente"
Ecco i dettagli:
| crea la Vista primaria "Cruscotto" | In Struttura - Viste crea la Vista "Cruscotto". In Mostra seleziona Utente. Attiva la creazione di una Pagina, mostra il risultato come Elenco non formattato di Campi. In Elementi da visualizzare seleziona 1, perché mostreremo un solo Utente (quello corrente). Disattiva il paginatore. Salva. |
| limita la Vista agli Utenti Partecipanti | Nella sezione Impostazione pagina - Accesso seleziona Ruolo e seleziona "Partecipante" |
| filtra la Vista sull'Utente corrente | Nella sezione Criteri del filtro aggiungi il Campo Utente - Corrente, come operatore seleziona è uguale a e come è l'utente autenticato seleziona si |
| mostra il nome dell'Utente | Nella sezione Campi aggiungi il Campo Utente - Nome con Etichetta "I tuoi dati:" e attiva Link all'utente per trasformare il nome in un link alla pagina coi dati personale dell'Utente |
| elenca i prestiti aperti concessi dall'Utente | Nella sezione Campi aggiungi il Campo speciale Globale - Visualizza, in Visualizza seleziona la Vista "Richieste" e in Visualizzazione seleziona "Aperte Proprietario". Non è necessario specificare i Filtri contestuali da passare, perché la Vista "Richieste" identifica l'Utente corrente da sé. ATTENZIONE: può capitare che la sezione della Vista e/o della Visualizzazione fallisca e venga selezionata la prima Vista elencata oppure un messaggio di errore. Se accade, per rimediare è sufficiente aprire nuovamente la configurazione del Campo e riselezionare la Vista / Visualizzazione. |
| elenca le richieste aperte avanzate dall'Utente | Nella sezione Campi aggiungi un altro Campo Globale - Visualizza, in Visualizza seleziona la Vista "Richieste" e in Visualizzazione seleziona "Aperte Richiedente". |
Catene di Viste e loro limitazioni
A loro volta, le Viste secondarie richiamate dalla Vista primaria potrebbero richiamare ulteriori Viste, creando così una catena di Viste. Anche se Drupal non pone limiti alla lunghezza di questa catena, è necessario considerare tre potenziali problemi, che inducono a limitare la catena a due o tre richiami:
- la Vista primaria non viene presentata fino a quando non sono state completate le operazioni che preparano le Viste sottostanti, quindi la app potrebbe rallentare significativamente
- Per lo stesso motivo, potrebbe capitare che la complessità delle interrogazioni del database mandino in errore la app
- occorre evitare richiami "ricorsivi", cioè una Vista A che richiama una Vista B che a sua volta richiama la Vista A
Il primo problema è teoricamente risolvibile abilitando la Cache della Vista (vedi Guida) ed evitando così che Drupal debba ogni volta ricostruire tutte le Viste richiamate. Questa soluzione però rischia di presentare all'Utente informazioni non aggiornate e quindi è attuabile solo se la Vista contiene informazioni che cambiano poco nel tempo.
Richiamare Viste in un testo
Se installiamo ed attiviamo il modulo aggiuntivo "Insert View", possiamo richiamare una o più Viste in un qualunque Campo testuale di una qualunque Entità. Il modulo mette infatti a disposizione il Token:
[view:NAME=DISPLAY=ARGS]
in cui:
- NAME è il nome ad uso interno della Vista, nome elencato in Struttura - Viste; è l'unico parametro obbligatorio per questo Token.
- DISPLAY è il nome della Visualizzazione della 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 valori passati ai Filtri contestuali della Vista, separati da /. Se la Vista non prevede Filtri contestuali, su può omettere questo parametro dal Token
Se scriviamo questo Token nel testo di un Campo testuale, quando l'Entità viene visualizzata il Token viene sostituito dal contenuto della Vista.
Questo metodo consente di costruire agevolmente pagine in cui sono mescolati testi fissi, immagini e informazioni elencate da Viste, per formare ad esempio un documento complesso basato sulle informazioni contenute nelle Entità della app. Per funzionare, il Campo testuale deve essere configurato con un Formato che accetti il Token [view].