Drupal Views2 Exposed Form как изменить - PullRequest
2 голосов
/ 16 января 2009

У меня есть вид с открытой формой. Я пытаюсь несколько вещей на нем. В идеале я хотел бы иметь выпадающий список, который запускает форму без кнопки. Если это невозможно, я бы хотел, чтобы текст кнопки отличался от применяемого.

Я взломал его сейчас и изменил views_form в views.module, но это не похоже на правильный способ сделать это. У меня сейчас только одна открытая форма, но что, если я добавлю еще?

Пожалуйста, см. http://www.wiredvillage.ca/News для моего примера.

Я слоняюсь по drupal.org и вижу других людей с такой же проблемой, но пока не найдено решений. Не уверен, где лучше всего получить помощь от Drupal.

Вот изменение, которое я сделал до сих пор:

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

Ответы [ 5 ]

6 голосов
/ 18 марта 2009

Или вы можете использовать функцию предварительной обработки, чтобы изменить форму еще до ее сборки. Я хотел изменить текст на кнопке, поэтому я сделал это:

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']);
  }
}
5 голосов
/ 18 января 2009

Если вы хотите, чтобы раскрывающийся список срабатывал, я бы использовал JavaScript вместо взлома модуля, как предполагает Итон.

По сути, вы можете изменить текст с помощью hook_form_alter, как предлагает Eaton, затем использовать в том же hook_form_alter, добавить вызов drupal_add_js с вашим пользовательским JS, который скрывает кнопку и отправляет форму в обработчик onChange раскрывающегося списка select , Вам нужна эта кнопка отправки для тех 10% пользователей, для которых JS не работает.

4 голосов
/ 15 декабря 2010

Оба вышеперечисленных подойдут, но я обнаружил, что изменение формы не всегда может привести к желаемым результатам, главным образом потому, что открытые фильтры тематизируются с использованием специального шаблона темы. Правильный способ изменить тему - переопределить файл views-exposed-form.tpl в папке вашей темы. Имейте в виду, что это будет применяться ко всем открытым формам фильтра, к определенной теме, вам нужно будет использовать другое имя для этого имени файла, например:

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

и некоторые другие, вы можете проверить Theme: Information раздел ваших представлений для соглашений именования шаблонов.

1 голос
/ 13 января 2011

Этот модуль обеспечивает автоматическую отправку среди прочего http://drupal.org/project/views_hacks

Этот модуль отлично подходит для улучшения открытых фильтров http://drupal.org/project/better_exposed_filters

0 голосов
/ 18 января 2009

Вы должны быть в состоянии использовать hook_form_alter () (http://api.drupal.org/api/function/hook_form_alter), чтобы изменить форму, как она построена, изменяя поля, о которых идет речь, когда отображается конкретный вид. функция темы, которая вызывает функцию drupal_add_js () и т. д.

Пока параметры GET соответствуют тому, как их ожидают представления, все будет работать нормально - он был спроектирован таким образом, что позволяет создавать закладки для страниц с открытыми настройками фильтра и т. Д. Важная часть - убедиться, что вы выполнение манипуляции с формой в функции hook_form_alter () вашего собственного модуля, чтобы не мешать другим объектам, управляемым представлениями.

...