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

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

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;

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.