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


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

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;

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.