Cómo cambiar filtros expuestos programáticamente en vistas

10

Tengo una vista de página con filtros expuestos. Uno de los filtros es el vocabulario de términos, y esa es la lista desplegable, el usuario puede seleccionar solo una categoría (término).

Quiero establecer programáticamente un término de la lista desplegable cuando vengo de una URL específica. Intenté con views_query_alterdónde $categoryestá tid.

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

 if ($set_exposed_input) {
    $view->set_exposed_input($set_exposed_input);
 }
miske
fuente
Aquí también hay un enlace útil: groups.drupal.org/node/82219#comment-1116663
Andrey Rudenko

Respuestas:

14

Para drupal 7 puedes usar

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

Esto es

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

Para un ejemplo completo, puedes probar esto:

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

Otra forma es usar la función set_option de vistas

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

foreach($alter['exposed'] as $key => $valor){
   $filters[$key]['value'] = $valor;
   $view->display_handler->set_option('filters', $filters);
}
rafinskipg
fuente
1
¿Dónde colocas esto, en una vista previa a la ejecución o algo así?
Mika A.
En las vistas tpl! Y el ejemplo completo, donde sea, tiene una función de vista de carga
rafinskipg
1
También puede agregarlo a hook_views_pre_view
Quentin Campbell
55
El archivo tpl se debe usar para mostrar el contenido representado, no para establecer la lógica empresarial. Por favor, intente uno de los otros innumerables ganchos de vistas: api.drupal.org/api/views/views.api.php/7
aaronbauman
¿Qué pasa con el filtro no expuesto? Tengo un caso de uso muy raro y necesito establecer el valor del filtro por código personalizado.
Codium
1

Establezca el valor del filtro expuesto de esta manera:

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

con Drupal 7.54 cuando desea procesar el filtro expuesto mediante programación, así es como lo hace cuando tiene un campo de valores múltiples. La solución para ver cómo pasar el filtro expuesto es seguir cómo se hace la URL.

Aquí: 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();

Puedes ejecutar esto desde donde quieras. Preferiblemente del archivo del módulo.

Denis Kolmerschlag
fuente