J'ai une vue de page avec des filtres exposés. L'un des filtres est le vocabulaire des termes, et c'est une liste déroulante, l'utilisateur ne peut sélectionner qu'une seule catégorie (terme).
Je veux définir un terme par programme dans la liste déroulante lorsque je viens d'une URL spécifique. J'ai essayé avec views_query_alter
où $category
est tid
.
$set_exposed_input = array();
$set_exposed_input['field_category_tid'] = $category;
if ($set_exposed_input) {
$view->set_exposed_input($set_exposed_input);
}
Pour drupal 7 vous pouvez utiliser
$view->exposed_input[$key] = $value;
C'est
$view->exposed_input['title'] = 'My title is a cat';
Pour un exemple complet, vous pouvez essayer ceci:
$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);
Une autre façon consiste à utiliser la fonction vues 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);
}
Définissez la valeur du filtre exposé comme ceci:
$view->exposed_input['field_category_tid'] = $category;
avec Drupal 7.54 lorsque vous souhaitez traiter le filtre exposé par programme, voici comment procéder lorsque vous avez un champ à plusieurs valeurs. La solution pour voir comment passer le filtre exposé est de suivre la façon dont le L'URL est faite.
Ici: nom_vue? 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();
Vous pouvez l'exécuter où vous le souhaitez. De préférence à partir du fichier module.