it-swarm.it

Come faccio ad aggiungere i menu a discesa nei criteri di filtro nel modulo Visualizzazioni?

Ero a un incontro locale Drupal gruppo la scorsa settimana in cui un membro ha eseguito una presentazione del modulo Views. Sono stato davvero entusiasta quando ho visto che era in grado di aggiungere menu a discesa ai criteri di filtro che stava usando come ho bisogno esattamente di quella funzionalità per qualcosa che sto costruendo.

Il fatto è: non riesco a trovare le impostazioni nella mia build. Ricordo che c'era un link "impostazioni" nella parte inferiore della sua area Criteri filtro, ma non ho nulla del genere.

Qualcuno potrebbe spiegare dove posso trovare questo? Mi manca un modulo aggiuntivo?

5
Martin Duys

I filtri nelle viste e il modo in cui sono esposti all'utente reagiscono in modo leggermente diverso a seconda del tipo di filtro utilizzato. Il tipo di filtro utilizzato è controllato definendo i dati nelle viste utilizzando hook_views_data e hook_views_data_alter. Questo è un po 'di codice e non sempre qualcosa che devi fare da solo come molti moduli, comprese le viste, fanno molto per te.

Sono utilizzati due filtri comuni

  • views_handler_filter_in_operator
  • views_handler_filter_string

I due sono fondamentalmente diversi perché i loro presupposti e requisiti sono molto diversi.

Il primo è quello che vorresti usare. Viene utilizzato quando si memorizza un valore con un elenco definito di possibili valori. Un esempio potrebbero essere i tipi di contenuto che è l'esempio che @Danielle ha usato nel suo post. Poiché i nodi non possono avere alcun valore casuale per il loro tipo di contenuto, è possibile che le viste visualizzino un elenco di caselle di controllo nell'interfaccia di amministrazione quando si utilizza questo filtro e un elenco di selezione/elenco di selezione multipla per l'utente quando viene esposto.

Il secondo viene utilizzato quando una stringa viene archiviata nel database. Utilizzando i nodi come esempio, il campo del titolo sarebbe un buon candidato per tale filtro. Poiché i titoli possono essere qualsiasi testo, non ha senso esporre la selezione del titolo di un nodo come caselle di controllo o elenchi di selezione, invece ottieni alcune altre opzioni come stai vedendo nella tua vista. Puoi filtrare se la stringa contiene una parola (inizio/fine/da qualche parte), è lunghezza ecc.

Se quello che ha fatto l'integrazione delle viste non si è preoccupato di usare in_operator tipo di filtro e descrivi alle viste (usando una funzione php) quali opzioni sono disponibili, dovrai farlo usando hook_views_data_alter.

Quello che devi fare è:

  1. Crea una sottoclasse di views_handler_filter_in_operator
  2. Strumento get_value_options
  3. Racconta opinioni sul tuo nuovo gestore.

Nel codice sarebbe simile a questo

/**
 * Define my custom in_opeator
 */
class my_custom_in_operator extends views_handler_filter_in_operator {
  // overwrite the get_value_options function.
  function get_value_options() {
    if (isset($this->value_options)) {
      return;
    }
    $this->value_options array('option_1' => t('Option 1'), 'option_2' => t('Option 2'));
  }
}

/**
 * Implements hook_views_data_alter().
 */
function my_custom_views_data_alter(&$data) {
  $data['entity_type']['property']['filter']['handler'] = 'my_custom_in_operator';
}

E hai finito. In realtà è in realtà abbastanza semplice. Ma scoprire come fare non è come le viste sono abbastanza complesse.

10
googletorp

Stai consentendo più valori nel filtro esposto? In tal caso, le selezioni verranno visualizzate in una casella di selezione con una barra di scorrimento per impostazione predefinita. Se imponi una sola selezione, per impostazione predefinita il filtro esposto verrà visualizzato in un menu a discesa. Spero che questo possa essere d'aiuto!

5
Danielle