Come modificare i filtri esposti a livello di codice nelle viste


10

Ho una visualizzazione di pagina con filtri esposti. Uno dei filtri è il termine vocabolario, ed è un elenco a discesa, l'utente può selezionare solo una categoria (termine).

Voglio impostare programmaticamente un termine dall'elenco a discesa quando provengo da un URL specifico. Ho provato con views_query_altercui $categoryè tid.

 $set_exposed_input  = array();
 $set_exposed_input['field_category_tid'] = $category;

 if ($set_exposed_input) {
    $view->set_exposed_input($set_exposed_input);
 }


Risposte:


14

Per drupal 7 puoi usare

$view->exposed_input[$key] = $value;

Questo è

$view->exposed_input['title'] = 'My title is a cat';

Per un esempio completo puoi provare questo:

$name = 'name_of_view';
$display = 'page_1';
$alter = array('exposed' =>array('title' => 'title_value'));

$view = views_get_view($name);
$view->init_display($display);
$view->preview=TRUE;
$view->is_cacheable = FALSE;


if(isset($alter['exposed'])){
  foreach($alter['exposed'] as $key => $valor){

     $view->exposed_input[$key] = $valor;

  }
}

$view->pre_execute();
$output = $view->display_handler->preview();
$view->post_execute();

print_r($view->result);

L'altro modo è usare la funzione set_option di views

$filters = $view->display_handler->get_option('filters');

foreach($alter['exposed'] as $key => $valor){
   $filters[$key]['value'] = $valor;
   $view->display_handler->set_option('filters', $filters);
}

1
dove lo collochi, in una vista pre-eseguita o qualcosa del genere?
Mika A.

Nelle viste tpl! E l'esempio completo, ovunque, ha una funzione di visualizzazione del carico
rafinskipg,

1
Puoi anche aggiungerlo a hook_views_pre_view
Quentin Campbell il

5
Il file tpl deve essere utilizzato per visualizzare il contenuto renderizzato, non per impostare la logica aziendale. Per favore, prova uno degli altri hook di viste: api.drupal.org/api/views/views.api.php/7
aaronbauman

Che dire del filtro non esposto? Ho un caso d'uso molto raro e devo impostare il valore del filtro in base al codice personalizzato.
Codium

1

Imposta il valore del filtro esposto in questo modo:

$view->exposed_input['field_category_tid'] = $category;

1

con Drupal 7.54 quando si desidera elaborare il filtro esposto a livello di codice, ecco come farlo quando si dispone di un campo a più valori. La soluzione per vedere come passare il filtro esposto è seguire come viene creato l'URL.

Qui: view_name? Alias ​​[1] = 1

$view = views_get_view('view_name');
$view->init_display('display_id');

$filters = array('alias' => array('1'));
$view->set_exposed_input($filters);

$view->execute();

Puoi eseguirlo da dove vuoi. Preferibilmente dal file del modulo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.