Views con filtri dinamici

 
Pagina di ricerca con filtri dinamici nelle views

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
- 3b

Assegnamo 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.
Finestra di selezione del tipo di filtro
Confermando verrà presentata una seconda interfaccia simile:
Configurazione del filtro della tassonomia
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:
Finestra delle impostazione del filtro della tassonomia
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.
Finestra delle impostazione del filtro della tassonomia
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.

AllegatoDimensione
Views di esempio da importare3.02 KB
Modulo Ajax Filter Views3.6 KB

Altri contenuti che potrebbero interessarti

  • Drupal si occupa esclusivamente della validazione lato server delle informazioni, ma spesso è consigliabile prevedere ad una prima validazione dei dati inseriti dall'utente lato client, in modo da evitare l'invio della richiesta limitando quindi le possibilità di errore. Ovviamente la validazione...
  • Esempio di vista generata dall'integrazione del nostro modulo con views
    Alzi la mano chi non ha mai usato views. Alzi la mano che l'ha mai usato. Ok, non proprio tutti ma buona parte di voi ha alzato la mano, questo perchè è sicuramente uno strumento potentissimo per la visualizzazione delle informazioni, quindi è fondamentale (o comunque molto utile) andare ad...
  • Chi avesse iniziato ad utilizzare Drupal 7 si sarà senz'altro d'accordo che stanno nascendo dei temi di partenza molto sofisticati da cui partire per la realizzazione di temi, in particolare sta emergendo sempre più Omega 3. Questi temi, però possono avere necessità di essere estesi per aggiungere...
  • Caricamento di un form tramite ajax
    Nella creazione di form può essere necessario procede con passi successivi in una serie di scelte, questo comporta una perdita di tempo per gli utenti e quindi è molto comodo sfruttare le potenzialità offerte da ajax per effettuare questi passaggi in cascata senza dover andare a ricaricare la...

Commenti

Ritratto di Matteo

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

Ritratto di anvs

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 ?

Ritratto di anvs

stesso discorso si puo' fare

stesso discorso si puo' fare per i campi cck ?
dovrebbe il principio essere lo stesso o sbaglio?

Ritratto di Black &amp; Jack

Mac

Ottimo post. Io ho il mac e ho lo stess problema di cui sopra ha commentato miodrupal.

Ritratto di Marco

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?

Ritratto di mavimo

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

Ritratto di twisterforever

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

Ritratto di mavimo

Si

Si, nella directory dei moduli.

Ritratto di Twisterforever

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

Ritratto di Hpl

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:

  • indice/musica
  • indice/teatro
  • indice/cinema

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.

Ritratto di mavimo

Se ho capito cosa vuoi fare,

Se ho capito cosa vuoi fare, non ti basta usare l'argument Taxonomy: Vocaulary ID?

Ritratto di Amhpl

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!

Ritratto di Daz

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&regione=1&provincia=4
Ritratto di mavimo

Ti è possibile passarmi il

Ti è possibile passarmi il codice della views e la tassonomia che stai usando per vedere dove sta il problema?

Ritratto di Daz

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!!

Ritratto di miodrupal

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

Ritratto di mavimo

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.gz
tar -xf modulo_ajax_filter_views_64358.gz

Invia nuovo commento





  • Elementi HTML permessi: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <h2> <h3> <h4> <table> <thead> <tbody> <tr> <th> <td>
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Linee e paragrafi vanno a capo automaticamente.
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.



Condividi contenuti