Indice

Viste con combinazioni di Filtri

Filtri in AND e OR logico tra loro.
Aggiornata il:
Stato: 🟩Pronta

Filtri in AND logico tra loro

Nelle Guide precedenti abbiamo visto come selezionare le Entità da elencare in una Vista con i Filtri della sezione Criteri del filtro. Ad esempio, abbiamo visto che nella Vista "Tuoi Attrezzi" della app "Vicinato" sono necessari i seguenti Filtri:

elenca Attrezziaggiungi Contenuto - Tipo di contenuto e seleziona "Attrezzo" 
elenca Attrezzi prestabiliaggiungi Contenuto - Stato (field_stato_attrezzo) - Appare in: attrezzo.
elenca Attrezzi di proprietà dell'Utente correnteaggiungi Utente - Corrente - Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "Proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si

I Filtri elencati nella sezione Criteri del filtro sono considerati in AND logico tra loro: una Entità è mostrata solo se soddisfa tutti i Filtri. Quindi i Filtri sopra elencati corrispondo a questa logica:

 (Tipo di contenuto=Attrezzo) AND (Stato dell'Attrezzo=Prestabile) AND (Utente corrente = Proprietario dell'Attrezzo)

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

 

se B è soddisfatto

se B non è soddisfatto

se A è soddisfatto

(A AND B) è soddisfatta

(A AND B) non è soddisfatta

se A non è soddisfatto

(A AND B) non è soddisfatta

(A AND B) non è soddisfatta

Filtri in OR logico tra loro

Nella costruzione di alcune Viste potremmo invece la necessità di mostrare Entità che soddisfano un Filtro oppure un altro Filtro. Ad esempio, nella app "Vicinato" ci potrebbe servire una Vista che mostri l'elenco delle Richieste all'Utente che chiede l'Attrezzo (Utente Richiedente) e all'Utente che presta l'Attrezzo (Utente Proprietario) ma a nessun altro Utente. Se in questa Vista aggiungiamo alla sezione Criteri del filtro un Filtro che impone che l'Utente corrente è il Richiedente e un Filtro che impone che l'Utente corrente è il Proprietario, non vedremo nessuna Richiesta, perché Richiedente e Proprietario non sono mai lo stesso Utente e quindi per nessun Utente saranno contemporaneamente soddisfatti i due Filtri.    

In un caso come questo, avremmo invece bisogno che i due Filtri siano in OR logico tra loro: una Entità è mostrata se soddisfa almeno uno dei Filtri, cioè:

(Utente corrente=Richiedente) OR (Utente corrente=Proprietario)

APPROFONDIMENTO: Dati due Filtri A e B, la loro combinazione A OR B è soddisfatta se almeno uno è soddisfatto. Quindi:

 

se B è soddisfatto

se B non è soddisfatto

se A è soddisfatto

(A OR B) è soddisfatta

(A OR B) è soddisfatta

se A non è soddisfatto

(A OR B) è soddisfatta

(A OR B) non è soddisfatta

Come comporre nella Vista i Filtri in AND / OR logico tra loro

Le Viste supportano sia Filtri in AND logico tra loro (è il default) sia in OR logico tra loro, sia in combinazione più complesse. Torniamo all'esempio di cui sopra, cioè una Vista che elenchi le Richieste al Richiedente e al Proprietario ma non agli altri Utenti. Per ottenere questo effetto occorre combinare i Filtri in questo modo:

(Tipo di contenuto=Richiesta) AND ((Utente corrente = Richiedente) OR (Utente corrente = Proprietario))

Infatti la combinazione ((Utente corrente = Richiedente) OR (Utente corrente = Proprietario)) è soddisfatta se l'Utente corrente è il Richiedente oppure è il Proprietario, ma non è soddisfatta se l'Utente corrente non è né Richiedente né Proprietario.  Vediamo come descrivere questo caso (il passaggio specifico è quello in grassetto):

mostra solo Richiestenella sezione Criteri del filtro aggiungi il Filtro Contenuto - Tipo di contenuto e seleziona "Richiesta"
identifica il Richiedente tramite la relazione (Richiesta → Autore) e il Proprietario tramite la catena di relazioni (Richiesta → Attrezzo) e (Attrezzo → Autore)  

nella sezione Relazioni:

  • aggiungi la relazione Contenuto -  Utente - Nome utente dell'autore del contenuto e rinominala "Richiedente"
  • aggiungi la relazione Contenuto - Contenuto referenziato da field_attrezzo_richiestato - Appare in: prestito e rinominala "Attrezzo"
  • aggiungi la relazione Contenuto -  Utente - Nome utente dell'autore del contenuto, seleziona la relazione "Attrezzo" e rinominale "Proprietario".
mostra le Richieste che hanno come Richiedente l'Utente correnteNella sezione Criteri del filtro aggiungi Utente - Corrente - Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "Richiedente", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si
mostra le Richieste che hanno come Proprietario l'Utente correnteNella sezione Criteri del filtro aggiungi Utente - Corrente - Filtra la vista con l'utente attualmente autenticato, come Relazione seleziona "Proprietario", come operatore seleziona è uguale a e come è l'utente autenticato seleziona si
metti i Filtri sull'Utente corrente in OR logico tra loro e in AND logico con gli altri Filtri

Nella sezione Criteri del filtro 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: