Estendere le Viste con le relazioni

Estendere le informazioni della Vista usando le relazioni tra Entità. Relazioni concatenate. Relazioni inverse.
Dal Vocabolario: Filtro, Vista, Filtro esposto
Aggiornata il:

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).