web-dev-qa-db-fra.com

Comment changer les filtres exposés par programme dans les vues

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$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);
 }
10
miske

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

Définissez la valeur du filtre exposé comme ceci:

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

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.

1
Denis Kolmerschlag