Question

J'ai une vue avec une forme exposée. J'essaie de faire quelques choses à ce sujet. Idéalement, j'aimerais avoir une liste déroulante qui déclenche le formulaire sans bouton. Si cela n’est pas possible, j'aimerais que le texte du bouton soit différent de ce qui est appliqué.

Je l’ai piraté pour le moment et ai changé le fichier views_form dans le fichier.module, mais cela ne semble pas être la bonne façon de le faire. Je n'ai qu'un seul formulaire exposé pour le moment, mais que se passe-t-il si j'en ajoute d'autres?

Veuillez consulter http://www.wiredvillage.ca/News pour consulter mon exemple.

Je fouille drupal.org et je vois d’autres personnes avec le même problème mais aucune solution à ce jour. Vous ne savez pas où est le meilleur endroit pour obtenir de l'aide Drupal.

Voici le changement que j'ai effectué jusqu'à présent:

function views_exposed_form(&$form_state) {
  // Make sure that we validate because this form might be submitted
  // multiple times per page.
  $form_state['must_validate'] = TRUE;
  $view = &$form_state['view'];
  $display = &$form_state['display'];
  $form_state['input'] = $view->get_exposed_input();
  // Let form plugins know this is for exposed widgets.
  $form_state['exposed'] = TRUE;
  $form['#info'] = array();
  if (!variable_get('clean_url', FALSE)) {
    $form['q'] = array(
      '#type' => 'hidden',
      '#value' => $view->get_url(),
    );
  }
  // Go through each filter and let it generate its info.
  foreach ($view->filter as $id => $filter) {
    $view->filter[$id]->exposed_form($form, $form_state);
    if ($info = $view->filter[$id]->exposed_info()) {
      $form['#info']['filter-' . $id] = $info;
    }
  }

  // I CHANGED The VALUE OF THIS SUBMIT BUTTON TO GO


  $form['submit'] = array(
    '#name' => '', // prevent from showing up in 

J'ai une vue avec une forme exposée. J'essaie de faire quelques choses à ce sujet. Idéalement, j'aimerais avoir une liste déroulante qui déclenche le formulaire sans bouton. Si cela n’est pas possible, j'aimerais que le texte du bouton soit différent de ce qui est appliqué.

Je l’ai piraté pour le moment et ai changé le fichier views_form dans le fichier.module, mais cela ne semble pas être la bonne façon de le faire. Je n'ai qu'un seul formulaire exposé pour le moment, mais que se passe-t-il si j'en ajoute d'autres?

Veuillez consulter http://www.wiredvillage.ca/News pour consulter mon exemple.

Je fouille drupal.org et je vois d’autres personnes avec le même problème mais aucune solution à ce jour. Vous ne savez pas où est le meilleur endroit pour obtenir de l'aide Drupal.

Voici le changement que j'ai effectué jusqu'à présent:

<*>GET. '#type' => 'submit', '#value' => t('go'), ); $form['#action'] = url($view->get_url()); $form['#theme'] = views_theme_functions('views_exposed_form', $view, $display); $form['#id'] = views_css_safe('views_exposed_form-' . check_plain($view->name) . '-' . check_plain($display->id)); // $form['#attributes']['class'] = array('views-exposed-form'); // If using AJAX, we need the form plugin. if ($view->use_ajax) { drupal_add_js('misc/jquery.form.js'); } views_add_js('dependent'); return $form; }
Était-ce utile?

La solution

Si vous souhaitez que le menu déroulant se déclenche, j'utiliserais JavaScript au lieu de pirater le module, comme le suggère Eaton.

Fondamentalement, vous pouvez modifier le texte avec hook_form_alter comme le suggère Eaton, puis utiliser le même hook_form_alter, ajouter un appel à drupal_add_js avec votre JS personnalisé qui masque le bouton et soumet le formulaire dans le gestionnaire onChange de la liste déroulante de sélection. . Vous souhaitez que ce bouton d'envoi soit disponible pour les 10% d'utilisateurs pour lesquels le JS échoue.

Autres conseils

Vous pouvez également utiliser une fonction de prétraitement pour modifier le formulaire avant même qu'il ne soit généré. Je voulais changer le texte sur le bouton, alors j'ai fait ceci:

function MYTHEME_preprocess_views_exposed_form(&$vars, $hook) {

  // only alter the jobs search exposed filter form
  if ($vars['form']['#id'] == 'views-exposed-form-jobs-search-page-1') {

    // Change the text on the submit button
    $vars['form']['submit']['#value'] = t('Search');

    // Rebuild the rendered version (submit button, rest remains unchanged)
    unset($vars['form']['submit']['#printed']);
    $vars['button'] = drupal_render($vars['form']['submit']);
  }
}

Les deux options ci-dessus sont acceptables, mais j'ai découvert que la modification du formulaire ne conduirait pas toujours à des résultats souhaitables, principalement parce que les filtres exposés sont basés sur un thème utilisant un modèle de thème spécifique. La bonne façon de changer le thème serait de remplacer le fichier views-exposure-form.tpl dans le dossier de votre thème. Gardez à l’esprit que cela s’appliquera à tous les formulaires de filtre exposés. Pour thématiser un filtre spécifique, vous devrez utiliser un nom différent pour ce nom de fichier, par exemple:

views-exposed-form--TITLE--DISPLAY.tpl.php
views-exposed-form--TITLE.tpl.php

et quelques autres, vous pouvez consulter la section Thème: Informations de vos vues pour connaître les conventions de dénomination des modèles.

Ce module fournit une soumission automatique entre autres http://drupal.org/project/views_hacks

Ce module permet d'améliorer les filtres exposés http://drupal.org/project/better_exposed_filters

Vous devriez pouvoir utiliser hook_form_alter () ( http://api.drupal.org / api / function / hook_form_alter ) pour modifier le formulaire au fur et à mesure de sa construction, en modifiant les champs en question lorsque cette vue particulière est affichée. Vous pouvez utiliser le bouton Soumettre, ajouter une fonction #theme qui appelle la fonction drupal_add_js (), etc.

Tant que les paramètres GET interviennent dans la manière dont les vues s’attendent, tout fonctionnera correctement. Il a été conçu de cette manière pour permettre la création de signets pour les pages avec des paramètres de filtre exposés, etc. manipuler le formulaire avec la fonction hook_form_alter () de votre propre module, de manière à ne pas étrangler les autres éléments gérés par les vues.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top