Como alterar filtros expostos programaticamente nas visualizações

10

Eu tenho uma exibição de página com filtros expostos. Um dos filtros é o vocabulário de termos e, nessa lista suspensa, o usuário pode selecionar apenas uma categoria (termo).

Quero definir programaticamente um termo da lista suspensa quando for de um URL específico. Eu tentei com views_query_alteronde $categoryestá tid.

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

 if ($set_exposed_input) {
    $view->set_exposed_input($set_exposed_input);
 }
enganar
fonte
Aqui também está o link útil: groups.drupal.org/node/82219#comment-1116663
Andrey Rudenko

Respostas:

14

Para o drupal 7, você pode usar

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

Isto é

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

Para um exemplo completo, você pode tentar o seguinte:

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

Outra maneira é usar a função de visualização set_option

$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
fonte
1
onde você coloca isso, em uma visão pré-executada ou algo assim?
Mika A.
Nas vistas tpl! E o exemplo completo, onde quer, ele tem uma função de visualização de carga
rafinskipg
1
Você também pode adicioná-lo ao hook_views_pre_view
Quentin Campbell
5
O arquivo tpl deve ser usado para exibir o conteúdo renderizado, não para definir a lógica de negócios. Por favor tente um dos outros inumeráveis vistas ganchos: api.drupal.org/api/views/views.api.php/7
aaronbauman
E o filtro não exposto? Tenho um caso de uso muito raro e preciso definir o valor do filtro por código personalizado.
Codium
1

Defina o valor do filtro exposto da seguinte forma:

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

com o Drupal 7.54, quando você deseja processar o filtro exposto programaticamente, é assim que você o faz quando possui um campo com vários valores. A solução para ver como passar o filtro exposto é seguir como a URL é criada.

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

Você pode executar isso de onde quiser. De preferência a partir do arquivo do módulo.

Denis Kolmerschlag
fonte