Jak zmienić programowo naświetlone filtry w widokach

10

Mam widok strony z widocznymi filtrami. Jednym z filtrów jest słownictwo terminowe, a to lista rozwijana, użytkownik może wybrać tylko jedną kategorię (termin).

Chcę ustawić programowo jeden termin z listy rozwijanej, gdy pochodzę z określonego adresu URL. Próbowałem z views_query_altergdzie $categoryjest tid.

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

 if ($set_exposed_input) {
    $view->set_exposed_input($set_exposed_input);
 }
miske
źródło
Tutaj jest także przydatny link: groups.drupal.org/node/82219#comment-1116663
Andrey Rudenko

Odpowiedzi:

14

Do drupala 7 możesz użyć

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

To jest

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

Aby uzyskać pełny przykład, możesz spróbować:

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

Innym sposobem jest użycie funkcji set_option widoków

$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
źródło
1
gdzie to umieścisz, w widoku wykonanym wcześniej lub coś takiego?
Mika A.
W widokach tpl! I pełny przykład, gdziekolwiek ma funkcję podglądu obciążenia
rafinskipg
1
Możesz także dodać go do hook_views_pre_view
Quentin Campbell
5
Plik tpl powinien być używany do wyświetlania renderowanej treści, a nie do ustawiania logiki biznesowej. Spróbuj jednego z innych niezliczonych haczyków: api.drupal.org/api/views/views.api.php/7
aaronbauman
Co z nieeksponowanym filtrem? Mam bardzo rzadki przypadek użycia i muszę ustawić wartość filtru według niestandardowego kodu.
Codium
1

Ustaw wartość odsłoniętego filtra w następujący sposób:

$view->exposed_input['field_category_tid'] = $category;
Junaid
źródło
1

w Drupal 7.54, gdy chcesz programowo przetwarzać filtr narażony, tak właśnie robisz, gdy masz pole o wielu wartościach. Rozwiązaniem, aby zobaczyć, jak przekazać odsłonięty filtr, jest śledzenie sposobu tworzenia adresu URL.

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

Możesz to zrobić z dowolnego miejsca. Najlepiej z pliku modułu.

Denis Kolmerschlag
źródło