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);
 }
miske
quelle
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);
}
rafinskipg
quelle
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;
Junaid
quelle
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.

Denis Kolmerschlag
quelle