So ändern Sie programmgesteuert belichtete Filter in Ansichten


10

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 versucht, views_query_alterwo $categoryist tid.

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

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

Hier ist auch ein nützlicher Link: groups.drupal.org/node/82219#comment-1116663
Andrey Rudenko

Antworten:


14

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

1
Wo platzierst du das, in einer Ansicht vor der Ausführung oder so?
Mika A.

In den Ansichten tpl! Und das vollständige Beispiel, wo immer es eine Load View-Funktion hat
Rafinskipg

1
Sie können es auch zu hook_views_pre_view
Quentin Campbell

5
Die tpl-Datei sollte zum Anzeigen gerenderter Inhalte und nicht zum Festlegen der Geschäftslogik verwendet werden. Bitte versuchen Sie einen der anderen unzähligen Ansichten Hooks: api.drupal.org/api/views/views.api.php/7
Aaronbauman

Was ist mit nicht belichtetem Filter? Ich habe einen sehr seltenen Anwendungsfall und muss den Filterwert durch benutzerdefinierten Code festlegen.
Codium

1

Stellen Sie den exponierten Filterwert wie folgt ein:

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

1

Wenn Sie mit Drupal 7.54 den exponierten Filter programmgesteuert verarbeiten möchten, gehen Sie wie folgt vor, wenn Sie ein Feld mit mehreren Werten haben. Die Lösung, um zu sehen, wie ein exponierter Filter übergeben wird, besteht darin, zu verfolgen, wie die URL erstellt wird.

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.