Indice

Viste dentro Viste e dentro testi

Viste che richiamano altre Viste al loro interno. Richiamare Viste dentro Campi testuali di Entità
Aggiornata il:
Stato: 🟩Pronta

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. 

Ad esempio, nella app "Vicinato" abbiamo una Vista "Prestiti conclusi" che, se richiamata col link

/prestiti-conclusi/ID

elenca i Prestiti conclusi sull'Attrezzo con identificativo ID. Per mostrare in testa a questa Vista primaria alcuni dettagli dell'Attrezzo (es. il suo nome e la sua immagine), creiamo una Vista secondaria "Dettagli di Attrezzo" che, come la  primaria, accetta come Filtro contestuale l'identificativo dell'Attrezzo. Ecco come richiamare la Vista secondaria "Dettagli di Attrezzo" in testa all'elenco dei prestiti mostrato dalla Vista primaria "Prestiti conclusi":

posiziona la Vista secondaria nella intestazione della Vista primariaNella sezione Intestazione della Vista "Prestiti conclusi" aggiungi il Campo speciale Globale - Area della vista - Inserisce una vista all'interno di un area e seleziona la Vista "Dettagli di Attrezzo"
passa alla Vista secondaria l'identificativo dell'Attrezzo ricevuto dalla Vista primaria Attiva l'opzione Eredita filtri contestuali

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

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. 

Richiamare 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 altre Viste (secondarie), richiamate nella sezione Campi della Vista primaria. 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 contenuto del Cruscotto cambia radicalmente se l'Utente corrente è un Operatore di sede o un Gestore, per semplicità didattica vediamo solo il caso del Partecipante ai prestiti:

  • DATI PERSONALI: il suo nome ed un link alla pagina dei suoi dati personali
  • I TUOI PRESTITI: i suoi prestiti aperti, il link ai suoi Attrezzi e un link ai suoi prestiti conclusi
  • LE TUE RICHIESTE: le sue richieste aperte, il link al Magazzino e un link alle sue richieste concluse

Poiché il punto di vista del Cruscotto è l'Utente corrente, conviene costruire la Vista "Cruscotto" come una Vista basata sull'Entità Utente e filtrata sull'Utente corrente. Nella sezione Campi della Vista aggiungeremo sia Campi dell'Utente (il suo nome, il link che punta alla pagina del suoi dati), sia Campi che richiamano altre Viste che elencano altri tipi di Entità (Prestiti, Richieste). 

Quest'ultima possibilità è offerta dal modulo aggiuntivo "Views Field View". Installato ed attivato questo modulo, per richiamare una Vista secondaria dentro la Vista primaria basta aggiungere nella sezione Campi della Vista primaria il nuovo tipo di Campo Globale - Visualizza - Embed a view as a field. This can cause slow performance, so enable some caching. Nella configurazione di questo Campo si specifica la Vista secondaria da richiamare, quale Visualizzazione e gli eventuali argomenti da passare. 

Esemplifichiamo questo metodo costruendo il Cruscotto sopra descritto. Anzitutto dobbiamo costruire le Viste secondarie che elencano prestiti e richieste aperti e conclusi di cui è Autore l'Utente corrente. Queste Viste possono essere agevolmente costruite sulla base di quanto già descritto nelle Guide precedenti come Variazioni di una Vista "Richieste", che elenca le Richieste e alcune informazioni degli eventuali Prestiti ad esse associate, filtrate sullo Stato della Richiesta e sull'Utente corrente nel seguente modo:

VisualizzazioneIndirizzoStato della RichiestaUtente corrente
Tue Richieste aperte/richieste-apertediverso da ConclusaRichiedente
Tue Richieste concluse/richieste-concluseConclusaRichiedente
Tuoi Prestiti aperti/prestiti-apertidiverso da ConclusaProprietario
Tuoi Prestiti conclusi/prestiti-conclusiConclusaProprietario 

 Costruite queste Visualizzazioni, la Vista "Cruscotto" è costruita come una semplice Vista basata sull'Utente corrente e che richiama una dopo l'altra le quattro Visualizzazioni nella propria sezione Campi, quindi come se fossero quattro Campi dell'Utente: 

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 PartecipantiNella sezione Impostazione pagina - Accesso seleziona Ruolo e seleziona "Partecipante"
filtra la Vista sull'Utente correnteNella 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'UtenteNella 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 richiamando la Vista "Richieste" - Visualizzazione "Tuoi Prestiti aperti"

Nella sezione Campi aggiungi il Campo speciale Globale - Visualizza, in Visualizza seleziona la Vista "Richieste"  e in Visualizzazione seleziona "Tuoi prestiti aperti". Non è necessario specificare i Filtri contestuali da passare, perché la Vista "Richieste" identifica l'Utente corrente da sé.

ATTENZIONE: Per un difetto attualmente presente in Drupal, può capitare che la sezione della Vista e/o della Visualizzazione fallisca e venga selezionata la prima Vista elencata. Se accade, per rimediare è sufficiente aprire nuovamente la configurazione del Campo e riselezionare.

mostra i comandi "Tuoi Attrezzi" e "Tuoi Prestiti conclusi"Come abbiamo già visto nella sezione Campi aggiungi il Campo speciale Globale - Testo personalizzato, come Testo digita "Tuoi Attrezzi", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato e come Percorso del link digita "/tuoi-attrezzi". Aggiungi un altro Campo Globale - Testo personalizzato, come Testo digita "Tuoi Prestiti conclusi", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato e come Percorso del link digita "/prestiti-conclusi".
elenca le richieste aperte avanzate dall'Utente richiamando la Vista "Richieste" - Visualizzazione "Tue Richieste aperte"Nella sezione Campi aggiungi un altro Campo Globale - Visualizza, in Visualizza seleziona la Vista "Richieste"  e in Visualizzazione seleziona "Tue Richieste aperte". 
mostra i comandi "Magazzino" e "Tue Richieste concluse"Nella sezione Campi aggiungi un altro Campo Globale - Testo personalizzato, come Testo digita "Magazzino", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato e come Percorso del link digita "/magazzino". Aggiungi un altro Campo Globale - Testo personalizzato, come Testo digita "Tue Richieste concluse", in Risultati di riscrittura attiva Mostra questo campo come un collegamento personalizzato e come Percorso del link digita "/richieste-concluse".

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]