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

10

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$categoryest tid.

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

 if ($set_exposed_input) {
    $view->set_exposed_input($set_exposed_input);
 }
miske
la source
Voici également un lien utile: groups.drupal.org/node/82219#comment-1116663
Andrey Rudenko

Réponses:

14

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);
}
rafinskipg
la source
1
où placez-vous cela, dans une vue de pré-exécution ou quelque chose comme ça?
Mika A.
Dans les vues tpl! Et l'exemple complet, partout où il a une fonction d'affichage de la charge
rafinskipg
1
Vous pouvez également l'ajouter à hook_views_pre_view
Quentin Campbell
5
Le fichier tpl doit être utilisé pour afficher le contenu rendu, et non pour définir la logique métier. Veuillez essayer l'un des nombreux autres crochets de vues: api.drupal.org/api/views/views.api.php/7
aaronbauman
Qu'en est-il du filtre non exposé? J'ai un cas d'utilisation très rare et j'ai besoin de définir la valeur du filtre par un code personnalisé.
Codium
1

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

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

avec Drupal 7.54 lorsque vous souhaitez traiter le filtre exposé par programme, voici comment procéder lorsque vous avez un champ à valeurs multiples. La solution pour voir comment passer le filtre exposé est de suivre la façon dont l'URL est créée.

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.

Denis Kolmerschlag
la source