it-swarm.com.de

So ändern Sie programmgesteuert belichtete Filter in Ansichten

Ich habe eine Seitenansicht mit exponierten Filtern. Einer der Filter ist das Begriffsvokabular. In dieser Dropdown-Liste kann der Benutzer nur eine Kategorie (Begriff) auswählen.

Ich möchte programmgesteuert einen Begriff aus der Dropdown-Liste festlegen, wenn ich von einer bestimmten URL komme. Ich habe es mit views_query_alter Versucht, wobei $categorytid ist.

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

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

Für drupal 7 können Sie verwenden

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

Das ist

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

Ein vollständiges Beispiel finden Sie hier:

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

Eine andere Möglichkeit ist die Verwendung der Ansichtsfunktion 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);
}
14
rafinskipg

Stellen Sie den exponierten Filterwert wie folgt ein:

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

mit Drupal 7.54, wenn Sie den exponierten Filter programmgesteuert verarbeiten möchten, tun Sie dies, wenn Sie ein Feld mit mehreren Werten haben. Die Lösung, um zu sehen, wie der exponierte Filter übergeben wird, besteht darin, zu folgen, wie der URL wird erstellt.

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

Sie können dies von jedem beliebigen Ort aus ausführen. Am besten aus der Moduldatei.

1