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

Commenti

Ritratto di Anonimo

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 Anonimo

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 Anonimo

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 Anonimo

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 Anonimo

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 Anonimo

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 Anonimo

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