Le viste sono uno strumento estremamente potente e permettono di andare ad elaborare le informazioni creando degli elementi (pagine, blocchi, ...) di presentazione. La possibilità di usare dei filtri esposti ne fa degli strumenti adatti alla creazione di strumenti di ricerca dei contenuti.
L'utilizzo della tassonomia come filtro esposto per la ricerca, però, non è così intuitivo, poiché l'eventuale albero viene presentato tutto all'interno di un unica select con una struttura indentata, cosa che per l'utente fruitore medio non è così intuibile.
Nel caso di vocabolario con un elevato numero di termini questo è anche scomodo perchè verranno presentati tutti i termini avendo quindi una lista molto lunga di elementi, decisamente scomoda quando si cerca di trovare un informazione.
Vediamo ora come ricorrere ad una serie di menu a tendina che presentano le informazioni della tassonomia su livelli separati (una select per oogni livello), in cui i livelli successivi vengono caricati in maniera asincrona in base alla selezione precedente.
Innanzitutto non si tratta di un modulo installa e funziona, per lo meno non ancora, ma ha bisogno di qualche piccola modifica a mano all'interno del codice in funzione del sito in cui deve essere usato (nulla di particolare, si tratta di dire il corretto vocabolario, e la views da usare).
Iniziamo creando il vocabolario che vogliamo usare per categorizzare i contenuti. Attualmente è pensato per funzionare con un vocabolario su due livelli, ma nulla vieta di estenderlo per supportarne un numero illimitato.
Il vocabolario creato (come esempio) è composto dai seguenti termini:
1
- 1a
- 1b
2
- 2a
- 2b
3
- 3a
- 3bAssegnamo il vocabolario al contenuto che vogliamo categorizzare e salviamo. Annotiamoci il numero de[[IMMAGINE]]
l vocabolario, datoche ci servirà dopo ed inseriamo i diversi contenuti.
Passiamo ora alla creazione della vista. Nulla di particolare, configuriamola come meglio crediamo con tutte le opzioni che ci servono, e alla fine aggiungiamo due filtri.
Per aggiungere i filtri selezionare il + a fianco del titolo della sezione, nella partee che compare sotto selezionare Taxonomy ed infini Taxonomy: Term, come indicato dall'immagine successiva.

Confermando verrà presentata una seconda interfaccia simile:

Andiamo a configurare questo filtro indicando il vocabolario da usare e confermiamo. Nell'interfaccia successiva andiamo ad esporre il filtro agli utenti (tasto Expose a destra in alto), il risultato dovrebbe essere simile a quanto possiamo vedere nell'immagine qui di seguito:

A questo punto configuriamola come riportato, facendo attenzione ad evidenziare TUTTI i termini del vocabolario (per ora non è ancora prevista la possibilità di presentare solo alcuni termini).
Annotiamoci il nome del filtro inserito (il valore immesso in filter identifier) e ripetiamo il tutto una seconda volta per la creazione di un secondo filtri esposto identico al primo tranne che per il nome del filtro. Annotiamoci anche questo secondo nome.
Ora apriamo il file ajax_filter_views.module del modulo che abbiamo scaricato e nella parte superiore andiamo a modificare:
<?php
define('VOCABULARY_VID', 1);
define('FIRST_LEVEL_NAME', 'first');
define('SECOND_LEVEL_NAME', 'second');
?>andando ad inserire i parametri che ci siamo segnati precedentemente. Al posto di 1 del VOCABULARY_VID andiamo ad inserire l'ID del vocabolario prima indicato, mente al posto di first e second andiamo ad inserire i filter identifier assegnati precedentemente.
Il risultato finale lo possiamo vedere nell'immagine seguente.

Allegato a questo articolo trovate una views di esempio da importare ed il modulo da installare (che per la views indicata è già configurato), ovviamente consiglie e critiche sono ben accetti.
| Allegato | Dimensione |
|---|---|
| Views di esempio da importare | 3.02 KB |
| Modulo Ajax Filter Views | 3.6 KB |
Commenti
Ho un problema analogo
Ho un problema analogo (e non sono particolarmente esperto di Drupal)... Ho creato diversi tipi di contenuto per una mediateca: VIDEO - IMMAGINI - AUDIO - TESTI.
Ho creato una view che visualizza i 4 tipi di contenuto in una griglia e ho messo i filtri esposti come da questa immagine
http://www.matteochessa.it/extra/2011-09-08-001.jpg
Quello che vorrei però è limitare la ricerca ai campi indicati (anche staticamente volendo) in un menu dropdown personalizzato
http://www.matteochessa.it/extra/2011-09-08-002.jpg
Sapresti indicarmi come fare per impostare la voce della seconda select come nome del campo dove cercare, anziché come contenuto?
grazie infinite
stessacosa si puo' fare per i
stessacosa si puo' fare per i ccck?
cioè il principio dovrebbe essere lo stesso o sbaglio?
come si potrebbe eventualmente fare ?
stesso discorso si puo' fare
stesso discorso si puo' fare per i campi cck ?
dovrebbe il principio essere lo stesso o sbaglio?
Mac
Ottimo post. Io ho il mac e ho lo stess problema di cui sopra ha commentato miodrupal.
Ottima soluzione, la
Ottima soluzione, la utilizzerò sicuramente.
Io ho un problema diverso ora:
Ho una tassonomia gerarchica di tipo:
Regione-Provincia
--Comune
Con hierarchical select ho fatto in modo che selezionando il comune il nodo venga taggato anche per la rispettiva regione e provincia.
A questo punto però vorrei mostrare nella vista un field che mi mostri solo il livello 0 oppure 1 oppure 2 con tanto di etichetta "regione, provincia, comune".
Ci sto smanettando da un po' ma non trovo soluzione. Sai aiutarmi?
Patch per views
Probabilmente ti servirà usare questa patch per view che ho fatto un pò di tempo fa:
non è ancora finita del ramo di rilascio, ma ha superato i vari test, quindi è considerata affidabile (io la uso in produzione da un bel pò e non ho problemi).
Puoi selezionare per ogni field che livelli mostrare (solo regione, solo provincia, ...). Credo sia quello che fa al caso tuo ;)
Info
Scusa un informazione sicuramente banale (ho un pò di niubbiaggine attorno), ma il modulo che modifico dove va messo nella cartella dei moduli di drupal??
Ciao e grazie :)
Si
Si, nella directory dei moduli.
Info modulo
Ciao scusa una domanda, sicuramente banale :), ma una volta modificato il modulo che ho scaricato da qui va messo nella cartella dei moduli??
Ciao e grazie in anticipo :)
Filtro "dinamico" su vocabolari diversi
Salve a tutti, una domanda di concetto!
E' possibile avere un filtro esposto "dinamico" per vocabolari diversi?
Spiego, ho 3 tipi di contenuto: MUSICA, CINEMA, TEATRO
Ognuno di essi ha associato un suo vocabolario "specifico" ed un certo numero di termini.
Ho costruito una views generica che mi filtra i post a seconda della tipologia del contenuto mediante un "arguments".
Quindi avrò a disposizione dei link di questo tipo:
Su queste view ho "esposto" dei filtri di ricerca per AUTORE e per DATA; ma vorrei anche aggiungere un filtro per il vocabolario associato al tipo quel particolare di contenuto.
Non mi pare sia possibile variare dinamicamente questo parametro con Views... oppure mi sbaglio?
Grazie.
Se ho capito cosa vuoi fare,
Se ho capito cosa vuoi fare, non ti basta usare l'argument Taxonomy: Vocaulary ID?
Spiego meglio
... ma è possibile in questo modo "esporre" poi un filtro (il classico menu a tendina) da cui l'utente possa scegliere (insieme a quelli già presenti per Autore e Data) la miglior combinazione per visualizzare i diversi contenuti...??
Conosco poco gli arguments: so solo che posso passare valori nell' ULR delle "pagine" e valori recuperati da funzioni PHP specifiche (per i Blocchi). Non ho idea se da li si possa (e come) passare il valore ad un filtro o crearne direttamente uno.
Spero di essermi spiegato meglio stavolta!
Un esempio calzante può essere questo:
http://drupal.org/project/issues/search/sitestats?status[]=8&status[]=13&status[]=14
E' una pagina della sezione "Patch" da un modulo preso a caso.
Io devo esporre i filtri nello stesso modo ma uno di questi (quello legato alla tassonomia) deve essere diverso a seconda del tipo di contenuto preso in esame.
Premetto che facendo una Views statica e sovrascrivendo poi i filtri su pagine diverse sono riuscito a farlo, ma volvevo capire se con una singola pagina + arguments potevo arrivare allo stesso risultato...
In questo modo aggiungendo col tempo altri "tipi di contenuto" non dovrei aggiornare la Views ma sono creare un nuovo link.
Ciao e Grazie!
tutto fatto ma...
l'ho installato e modificato come da post.. c'è solo un problema, quando eseguo il filtro con any su tutti e due i filtri il modulo si comporta in modo corretto (lista completa di tutte le story), quando invece seleziono un "sottoelemento" non mi restituisce niente. Ho già controllato tid e identificatori e sono corretti. Mistero!
Quì l'URL dopo la ricerca:
http://localhost/?q=altro_test®ione=1&provincia=4Ti è possibile passarmi il
Ti è possibile passarmi il codice della views e la tassonomia che stai usando per vedere dove sta il problema?
View + tassonomia
Premetto che non ho creato un nuovo content type ma, banalmente, ho lavorato su story.
Quì l'export della view (..spero tu intendessi questo..):
$view = new view;$view->name = 'altro_test';
$view->description = 'un test sulla tassonomia';
$view->tag = 'test';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('fields', array(
'title' => array(
'label' => 'Title',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'link_to_node' => 0,
'exclude' => 0,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
),
'body' => array(
'label' => 'Body',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'exclude' => 0,
'id' => 'body',
'table' => 'node_revisions',
'field' => 'body',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
),
'name' => array(
'label' => 'Term',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'link_to_taxonomy' => 0,
'exclude' => 1,
'id' => 'name',
'table' => 'term_data',
'field' => 'name',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
),
));
$handler->override_option('filters', array(
'tid' => array(
'operator' => 'or',
'value' => array(
'2' => '2',
'7' => '7',
'10' => '10',
'9' => '9',
'8' => '8',
'1' => '1',
'6' => '6',
'5' => '5',
'4' => '4',
'3' => '3',
'11' => '11',
),
'group' => '0',
'exposed' => TRUE,
'expose' => array(
'use_operator' => 0,
'operator' => 'tid_op',
'identifier' => 'regione',
'label' => 'Regione',
'optional' => 1,
'single' => 1,
'remember' => 0,
'reduce' => 1,
),
'type' => 'select',
'limit' => TRUE,
'vid' => '1',
'id' => 'tid',
'table' => 'term_node',
'field' => 'tid',
'hierarchy' => 1,
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
'reduce_duplicates' => 1,
),
'tid_1' => array(
'operator' => 'or',
'value' => array(
'2' => '2',
'7' => '7',
'10' => '10',
'9' => '9',
'8' => '8',
'1' => '1',
'6' => '6',
'5' => '5',
'4' => '4',
'3' => '3',
'11' => '11',
),
'group' => '0',
'exposed' => TRUE,
'expose' => array(
'use_operator' => 0,
'operator' => 'tid_1_op',
'identifier' => 'provincia',
'label' => 'Provincia',
'optional' => 1,
'single' => 1,
'remember' => 0,
'reduce' => 1,
),
'type' => 'select',
'limit' => TRUE,
'vid' => '1',
'id' => 'tid_1',
'table' => 'term_node',
'field' => 'tid',
'hierarchy' => 1,
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
'reduce_duplicates' => 1,
),
));
$handler->override_option('access', array(
'type' => 'none',
));
$handler->override_option('cache', array(
'type' => 'none',
));
$handler = $view->new_display('page', 'Page', 'page_1');
$handler->override_option('path', 'altro_test');
$handler->override_option('menu', array(
'type' => 'none',
'title' => '',
'description' => '',
'weight' => 0,
'name' => 'navigation',
));
$handler->override_option('tab_options', array(
'type' => 'none',
'title' => '',
'description' => '',
'weight' => 0,
));
Per quanto riguarda la tassonomia:
name: Regioni e province
type: story
tid: 1
ovviamente nomi delle regioni come padre e nomi delle province come figlio.
Spero sia quello che mi hai chiesto ;-) e grazie!!
Non riesco ad aprire il modulo
Intanto grazie per l'articolo che trovo molto interessante ed utile e volevo subito provare ad usarlo, ma non sono riuscito ad aprire il file del modulo. Né con winrar su win, né con ubuntu (ma non da linea di comando), potresti, ti ringrazio per qualche delucidazione in merito
prova a decoomprimerlo con
prova a decoomprimerlo con tar da console, probabilmente devidecomprimerlo due volte perché viene inviato compresso, ma non dovresti avere altri problemi.
wget http://mavimo.org/files/articolo/86/modulo_ajax_filter_views_64358.gztar -xf modulo_ajax_filter_views_64358.gz
Invia nuovo commento