J'ai du mal à utiliser hook_form_alter()
avec Views 3 et Drupal 7.
Je ne parviens pas à ajouter une instruction if pour identifier de façon unique une vue; quoi que je mette, la déclaration if ne se révèle jamais vraie. Cependant, je peux facilement utiliser le form_id en utilisant ce qui suit, donc je ne sais pas où je me trompe!
if ($form_id == 'views_exposed_form') {
}
Comment utiliser hook_form_alter()
pour modifier de manière unique une seule vue de la mienne?
Vous pouvez accéder à l'objet de vue dans hook_form_alter en accédant à $form_state['view']
. Cela vous permet d'identifier une vue spécifique:
function mymodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'views_exposed_form') {
$view = $form_state['view'];
if ($view->name == 'my_view_machine_name' && $view->current_display == 'display_name') {
// alter your exposed form here
}
}
}
Ce que je ferais, c'est prendre un peu de recul et voir si vous enregistrez même ce crochet. Souvent $form_id
's change.
Processus de débogage:
Exemple de code (à l'intérieur mymodule.module
ou template.php
fichier) de drupal.org :
<?php
/**
* Implements hook_form_alter().
*/
function mymodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'form_views_exposed_form') {
drupal_set_message("Form ID is : " . $form_id);
}
}
?>
Vous verrez un tas d'ID de formulaire imprimé, puis sélectionnez votre point de vue exposé et travaillez à partir de là.
De plus, avec drupal 7 vous pouvez cibler des formulaires par ID directement .
Exemple:
<?php
/**
* Implements hook_form_alter().
*/
function mymodule_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
drupal_set_message("Form ID is : " . $form_id);
}
?>
Notez que si vous utilisez plusieurs formulaires exposés, vous pouvez vérifier une vue spécifique en examinant $ form ['# id'] dans la fonction alter form.
Enfin, si cela ne fonctionne pas, je recommanderais de revoir cette file d'attente de problèmes: Comment modifier le filtre dans les filtres exposés via le crochet form_alter
récemment, j'ai également rencontré ce problème, mais j'utilise un module de fonctionnalité au lieu d'un module personnalisé. Cela m'a aidé à résoudre le problème.
/**
* Implements hook_views_api_alter()
*/
function MY_FEATURE_views_api_alter(&$vars) {
if (isset($vars['MY_FEATURE'])) {
$vars['MY_FEATURE']['path'] = drupal_get_path('module', 'MY_FEATURE');
}
}
Et puis vous pouvez utiliser votre hook_form_views_exposed_form_alter ():
/**
* Implements hook_form_views_exposed_form_alter().
*/
function MY_FEATURE_form_views_exposed_form_alter(&$form, &$form_state) {
if($form['#id'] == 'views-exposed-form-search-products-page') {
$form['price'] = array(
'#type' => 'select',
'#size' => NULL,
'#options' => _getPriceOptions(),
);
}
}