Drupal Views2公开表单如何更改

Drupal Views2公开表单如何更改,drupal,drupal-6,drupal-views,Drupal,Drupal 6,Drupal Views,我有一个暴露形式的视图。我正试着在上面写一些东西。理想情况下,我希望有一个下拉菜单,不带按钮地触发表单。如果这是不可能的,那么我想有按钮文本的东西不同于适用 我现在入侵了它,并在views.module中更改了views\u表单,但这似乎不是正确的方法。我现在只有一个暴露的表单,但是如果我添加更多呢 请看我的例子 我在drupal.org上闲逛,看到其他人也有同样的问题,但到目前为止还没有解决方案。不确定哪里是获得Drupal帮助的最佳地点 以下是我到目前为止所做的更改: function vi

我有一个暴露形式的视图。我正试着在上面写一些东西。理想情况下,我希望有一个下拉菜单,不带按钮地触发表单。如果这是不可能的,那么我想有按钮文本的东西不同于适用

我现在入侵了它,并在views.module中更改了views\u表单,但这似乎不是正确的方法。我现在只有一个暴露的表单,但是如果我添加更多呢

请看我的例子

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

您应该能够使用hook_form_alter()()在构建表单时更改表单,在显示特定视图时修改相关字段。您可以单击submit按钮,添加一个调用drupal_add_js()函数的主题函数,等等


只要GET参数符合视图的预期,一切都会正常工作——它的设计允许使用公开的过滤器设置等对页面进行书签。重要的是确保您在自己模块的hook\u form\u alter()函数中进行表单损坏,这样它就不会让其他视图驱动的东西窒息。

如果你想启动下拉菜单,我会使用JavaScript,而不是像伊顿建议的那样对模块进行黑客攻击


基本上,您可以按照Eaton的建议使用hook\u form\u alter修改文本,然后在同一个hook\u form\u alter中使用自定义js添加对drupal\u add\u js的调用,该调用隐藏按钮并在select下拉列表的onChange处理程序上提交表单。您希望提交按钮用于JS失败的10%用户。

或者,您可以在表单生成之前使用预处理函数更改表单。我想更改按钮上的文本,所以我这样做:

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

以上两种方法都很好,但我发现改变表单可能并不总是能得到理想的结果,主要是因为公开的过滤器使用特定的主题模板进行主题化。更改主题的正确方法是覆盖主题文件夹中的
视图公开表单.tpl
文件。请记住,这将适用于所有公开的筛选表单,要设置特定表单的主题,您需要为该文件名使用不同的名称,如:

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

您可以查看视图的主题:信息部分,了解模板命名约定。

此模块提供自动提交功能


这个模块对于改进暴露的过滤器非常有用

是的,David的建议很合理。要在非JS客户端上实现干净的降级,请将按钮保留在那里,但使用JS将其删除或隐藏。但是,您仍然可以使用hook\u form\u alter()来添加调用drupal\u add\u js的主题函数。您是否已修改“选择”下拉列表以添加onChange处理程序?只有删除该按钮,drupal才能知道视图的公开过滤器已更新。不过,您不需要提交页面,如果您是通过Ajax加载结果的,您可能可以连接到该页面,但是需要某种onChange处理程序。它是一个项目页面,不太可能更改。