In questa Guida vediamo come filtrare il risultato di una Vista agendo sul link con cui la Vista viene richiamata.
Filtri della sezione Filtri contestuali
Nelle Guide precedenti abbiamo visto come filtrare le Entità elencate da una Vista grazie ai Filtri elencati nella sezione Criteri del Filtro. Abbiamo anche visto che un Filtro è formato da tre parti:
- il Campo su cui agisce il Filtro (es. "Stato")
- l'operatore con cui svolgere il confronto (es. è uguale a)
- il valore da confrontare col contenuto del Campo (es. "Prestabile")
E' possibile aggiungere alla Vista Filtri anche nella sezione Filtri contestuali. Questi ulteriori Filtri (che chiameremo Filtri contestuali) agiscono in AND logico coi Filtri elencati nella sezione Criteri del filtro: per essere elencata dalla Vista, una Entità deve soddisfare sia i Filtri della sezione Criteri del filtro sia i Filtri contestuali.
Mentre un Filtro della sezione Criteri del filtro prende il valore da confrontare col Campo dalla configurazione stessa della Vista (se è un Filtro "nascosto") oppure dalla scelta effettuata dall'Utente (se è un Filtro "esposto"), un Filtro contestuale prende il valore dal link con cui viene richiamata la Vista. Diversamente dai Filtri della sezione Criteri del filtro, quindi, un Filtro contestuale consente di cambiare il risultato della Vista agendo esternamente su di essa, passandole uno o più valori di confronto attraverso il link di richiamo.
Vediamo come esempio come modificare la Vista "Tuoi Attrezzi" della app "Vicinato" che abbiamo costruito nelle Guide precedenti, perché filtri gli Attrezzi non in base all'Utente corrente ma in base ad un Utente che specifichiamo nel link di richiamo della Vista. A questo scopo togliamo dalla sezione Criteri del filtro il Filtro che limita la Vista ai soli Attrezzi il cui Proprietario coincide con l'Utente corrente ed aggiungiamo nella sezione Filtri contestuali il Campo Utente - ID Utente con Relazione "Proprietario". Richiamando la Vista col link
/tuoi-attrezzi/316
il Filtro della sezione Filtri contestuali limiterà la Vista ai soli Attrezzi di proprietà dell'Utente con identificativo 316.
Se nella sezione Filtri contestuali sono elencati più Campi, i corrispondenti valori devono essere scritti nel link nello stesso ordine con cui sono elencati nella sezione e separati da /. Ad esempio, se nella Vista sopra descritta aggiungiamo il Filtro contestuale Contenuto - ID Contenuto con Relazione "Categoria" (che corrisponde al numero che identifica univocamente una Categoria) e la richiamiamo col link:
/tuoi-attrezzi/316/12
la Vista elencherà solo gli Attrezzi dell'Utente con identificativo 316 e classificati con la Categoria con identificativo 12.
Nella terminologia Drupal, i valori trasmessi ai Filtri contestuali attraverso il link sono chiamati argomenti (arguments) e talvolta sono chiamati argomenti i Filtri stessi: quando nelle spiegazioni di Drupal si legge "argomento" è molto probabile che si stia parlando di Filtri contestuali.
I valori letti nel link e usati nei Filtri contestuali sono disponibili nella Vista grazie ai Token {{ raw_arguments.NOMEINTERNODELCAMPO }} es. {{ raw_arguments.nid }}. Questi Token sono elencati nella configurazione degli altri Campi della Vista sotto Replacement patterns.
Non solo numeri
Anche se è il caso più comune, non è necessario usare come argomenti gli identificativi numerici delle Entità: in realtà si possono usare come Filtri contestuali anche gli altri Campi delle Entità. Se, nell'ultimo esempio, al posto del Filtro contestuale Contenuto - ID Contenuto con Relazione "Categoria" scriviamo il Filtro contestuale Contenuto - Title con Relazione "Categoria" (che corrisponde al nome della Categoria), possiamo richiamare la Vista specificando nel link il nome della Categoria, es:
/tuoi-attrezzi/316/Giardino
Valori di default per i Filtri contestuali
Se una Vista ha uno più Filtri nella sezione Filtri contestuali e la Vista viene richiamata con un un link che contiene un numero di argomenti inferiore al numero dei Filtri, l'elenco mostrato dalla Vista può essere diverso da quello atteso: i Filtri contestuali sono in AND logico tra loro e quindi l'assenza di un argomento può far fallire uno dei Filtri e quindi la Vista potrebbe non mostrare nessuna Entità. Inoltre il link non contiene il nome del Campo cui applicare l'argomento, quindi non è neppure possibile "saltare" un argomento, ma occorre sempre passare un numero di argomenti pari al numero di Filtri contestuali.
Se un argomento manca nel link, nella configurazione del filtro contestuale possiamo decidere come deve comportarsi la Vista scegliendo una delle opzioni elencate in Quando il valore del filtro NON è nell'URL:

Se scegli Mostra tutti i risultati per il campo specifico il Filtro viene ignorato. Se scegli Fornire il valore di default devi specificare dove prendere il valore mancante; tra le opzioni più comunemente usate: ID del contenuto dell'URL (utile per i Blocchi, lo vedremo a suo tempo), Fisso (un valore fisso), Parametro query (es. se costruiamo il link come /tuoi-attrezzi?categoria=12 e indichiamo qui "categoria" come parametro, il valore viene preso dal nome del parametro e non dalla sua posizione), ID Utente degli utenti autenticati (ID dell'Utente corrente).
Filtrare per intervalli di valori
Diversamente dai Filtri della sezione Criteri del filtro, per i Filtri contestuali non è possibile scegliere l'operatore con cui eseguire il confronto: il valore ricevuto dal link deve essere uguale al valore del Campo utilizzato come Filtro nella sezione Filtri contestuali. Questa rigidità può essere parzialmente risolta installando ed attivando il modulo aggiuntivo "Views Contextual Range Filter", che aggiunge la possibilità di passare ad un Filtro contestuale un intervallo di valori anziché un unico valore. Ad esempio, se volessimo una Vista che elenca i Prestiti erogati nell'anno 2025 da tutti gli Utenti della app "Vicinato", potremmo mettere nella sezione Filtri contestuali il Campo "Data" del Prestito e poi richiamare la Vista col link:
/prestiti-conclusi/2025-01-01--2025-12-31
dove il doppio trattino -- separa il valore minimo e massimo dell'intervallo, realizzando così l'operatore "tra" E' anche possibile passare alla Vista un intervallo aperto, ad esempio per elencare i Prestiti dal 1 gennaio del 2026:
/prestiti-conclusi/2026-01-01--
realizzando così l'operatore "maggiore di" (e ovviamente anche "minore di").
| ATTENZIONE: Affinché l'intervallo passato ad un Filtro contestuale sia correttamente interpretato, è necessario dichiarare che quel Filtro può ricevere un intervallo di valori: in Configurazione - Contextual Range Filter devi trovare il Filtro e attivare la sua casellina. Per sicurezza, consiglio dopo di questa attivazione di svuotare la cache di Drupal con Configurazione - Prestazioni - Svuota la cache. |
Vedremo più avanti un uso particolare degli intervalli di valore sui Filtri contestuali per costruire comandi di navigazione "Precedente" "Successivo" su un insieme di Entità definito da una Vista.
Filtri contestuali e costruzione della app
I Filtri contestuali sono molto utili nella costruzione di una app, perché consentono di creare Viste "flessibili", che forniscono elenchi diversi in base agli argomenti ricevuti nel link, evitando così di dover costruire più Viste molto simili tra loro. Ad esempio, nella app "Vicinato" possiamo costruire una Vista che, in base all'argomento che riceve dal link, mostra i Prestiti conclusi su tutti gli Attrezzi dell'Utente corrente oppure i Prestiti conclusi su uno specifico Attrezzo dell'Utente corrente: per ottenere questa flessibilità è sufficiente aggiungere nella sezione Filtri contestuali il Campo Contenuto - ID Contenuto con Relazione "Attrezzo" e, nella sua configurazione, in Quando il valore del filtro NON è nell'URL selezionare l'opzione Mostra tutti i risultati per il campo specifico.
La vera potenza dei Filtri contestuali nella costruzione della app emergerà nelle prossime Guide, quando vedremo come costruire comandi cliccabili dall'Utente che richiamano una Vista passandole l'argomento. Anche il comando verrà costruito con una Vista e quindi avremo costruito in questo modo una catena di Viste attivata dall'Utente: la prima Vista espone all'Utente un comando che contiene il link di richiamo della seconda Vista con gli argomenti necessari, la seconda Vista viene richiamata dal click dell'Utente sul comando esposto dalla prima.
Un'altra applicazione molto importante dei Filtri contestuali nella costruzione della app sono le Viste EVA, cioè Viste che vengono richiamate dentro la pagina di una Entità: in questo caso, è Drupal che richiama implicitamente la Vista, passandole come argomento l'identificativo dell'Entità.