Drupal Views2暴露形式如何改变

时间:2009-01-16 19:59:23

标签: drupal drupal-6 drupal-views

我有一个暴露表格的视图。我正在尝试一些事情。理想情况下,我希望有一个下拉列表,无需按钮即可触发表单。如果那是不可能的话,那么我希望按钮文本与应用不同。

我现在已经破解了它并更改了views.module中的views_form,但这似乎不是正确的方法。我现在只有一个暴露形式,但是如果我添加更多呢?

请参阅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 个答案:

答案 0 :(得分:6)

或者,您可以使用预处理功能在构建之前更改表单。我想更改按钮上的文字,所以我这样做了:

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

答案 1 :(得分:5)

如果你想要下拉,我会使用JavaScript而不是像伊顿建议的那样攻击模块。

基本上,您可以使用hook_form_alter修改文本,如伊顿建议的那样,然后在同一个hook_form_alter中使用,使用自定义JS添加对drupal_add_js的调用,隐藏按钮并在选择下拉列表的onChange处理程序上提交表单。你想要那个为JS失败的用户的10%用户提交按钮。

答案 2 :(得分:4)

以上两种情况都很好,但我发现改变形式可能并不总能产生理想的结果,主要是因为暴露的过滤器是使用特定主题模板的主题。更改主题的正确方法是覆盖主题文件夹中的views-exposed-form.tpl文件。请记住,这将适用于所有公开的过滤器表单,对于特定的过滤器表单,您需要为该文件名使用不同的名称,如:

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

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

答案 3 :(得分:1)

此模块提供自动提交等http://drupal.org/project/views_hacks

此模块非常适合改进公开的过滤器http://drupal.org/project/better_exposed_filters

答案 4 :(得分:0)

您应该能够使用hook_form_alter()(http://api.drupal.org/api/function/hook_form_alter)来更改表单的构建,在显示特定视图时修改相关字段。你可以点击提交按钮,添加一个调用drupal_add_js()函数的#theme函数,依此类推。

只要GET参数符合视图预期的方式,一切都会正常工作 - 它的设计方式允许对带有暴露过滤器设置等的页面进行书签。重要的是要确保你是在你自己的模块的hook_form_alter()函数中执行表单修改,这样就不会让其他视图驱动东西窒息。