Indice

🟦Nuova 🟩Pronta 🟨Bozza 🟥Da scrivere

Viste dentro Viste e dentro testi

Viste che richiamano altre Viste al loro interno. Richiamare Viste dentro Campi testuali di Entità. Richiamo condizionato di una Vista.
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:

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:

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]