Frage

Ich habe eine Ansicht mit einer exponierten Form. Ich versuche, ein paar Dinge auf sich. Im Idealfall würde Ich mag eine Dropdown-Liste, die die Form ohne Taste feuert. Wenn das nicht möglich ist, dann würde Ich mag auf den Button Text etwas anderes als anwenden haben.

ich gehackt es für jetzt und ändern views_form in views.module aber das scheint nicht, wie der richtige Weg, es zu tun. Ich eine freiliegende Form nur im Augenblick haben, aber was, wenn ich mehr hinzufügen?

Bitte finden Sie unter http://www.wiredvillage.ca/News für mein Beispiel.

Ich bin Stochern drupal.org und andere mit dem gleichen Problem, aber keine Lösungen so weit zu sehen. Nicht sicher, wo der beste Ort, Drupal, Hilfe zu bekommen ist.

Hier ist die Veränderung, die ich bisher gemacht:

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 $_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;
}
War es hilfreich?

Lösung

Wenn Sie auf den Dropdown-Feuer wollen, würde ich JavaScript verwenden, anstatt das Modul von Hacking als Eaton vermuten lässt.

Grundsätzlich können Sie den Text mit hook_form_alter ändern, wie Eaton schon sagt, dann in dem gleichen hook_form_alter verwenden, einen Anruf hinzufügen, mit Ihrem eigenen JS drupal_add_js, die den Knopf versteckt und senden das Formular auf dem onChange Handler der Auswahl Dropdown- . Sie möchten, dass Submit-Button gibt es für jene 10% der Nutzer, für die der JS ausfällt.

Andere Tipps

Oder könnten Sie eine Vorprozess Funktion verwenden Sie das Formular zu ändern, noch bevor es bauen ist. Ich wollte den Text auf der Schaltfläche ändern, so dass ich tat dies:

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']);
  }
}
führen nicht immer zu wünschenswerten Ergebnissen

Beide oben sind in Ordnung, aber ich fand heraus, dass die Form zu verändern, vor allem, weil ausgesetzt Filter Themen sind eine specifc Thema Vorlage. Der richtige Weg, das Thema zu ändern wäre, die views-exposed-form.tpl Datei in Ihrem Thema Ordnern außer Kraft zu setzen. Denken Sie daran, dass dies auf alle freiliegenden Filterformen gelten, ein spezifisches Thema zu können, benötigen Sie einen anderen Namen für den Dateinamen verwenden, wie:

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

und einig anderes, können Sie überprüfen Sie die . Thema: Informationen Ihre Ansichten zur Vorlage Namenskonvention

Dieses Modul bietet eine automatische Senden unter anderem http://drupal.org/project/views_hacks

Dieses Modul ist groß ausgesetzt Filter verbessern http://drupal.org/project/better_exposed_filters

Es soll möglich sein hook_form_alter () zu verwenden ( http://api.drupal.org / api / Funktion / hook_form_alter ), um die Form zu ändern, wie es gebaut ist, um die Felder in Frage modifizieren, wenn diese bestimmte Ansicht angezeigt wird. Sie können den Absenden-Button nuke, fügen Sie eine #theme Funktion, die die drupal_add_js () Funktion aufruft, und so weiter.

Solange die GET kam params in der Art und Weise Ansichten sie erwarten, alles gut funktioniert - es wurde so entworfen bookmarking von Seiten mit freiliegenden Filtereinstellungen zu ermöglichen, usw. Der wichtige Teil ist, dass Sie, um sicherzustellen, sind die Form dabei in der eigenen Modul hook_form_alter () Funktion Mangeln, dass es nicht andere Ansichten getrieben Sachen Choke machen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top