2

我有一个带有暴露形式的视图。我正在尝试一些事情。理想情况下,我希望有一个下拉菜单可以触发没有按钮的表单。如果那不可能,那么我希望按钮文本与应用不同。

我现在破解了它并更改了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;
}
4

5 回答 5

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']);
  }
}
于 2009-03-18T17:53:08.037 回答
5

如果您希望触发下拉菜单,我会使用 JavaScript 而不是像伊顿建议的那样破解模块。

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

于 2009-01-18T06:50:22.137 回答
4

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

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

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

于 2010-12-14T23:31:04.450 回答
1

此模块提供自动提交以及其他功能http://drupal.org/project/views_hacks

这个模块非常适合改进暴露的过滤器http://drupal.org/project/better_exposed_filters

于 2011-01-13T08:10:16.690 回答
0

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

只要 GET 参数以视图期望的方式出现,一切都会正常工作——它的设计方式是允许使用暴露的过滤器设置等为页面添加书签。重要的部分是确保您正在执行表单修改你自己模块的 hook_form_alter() 函数,这样它就不会让其他视图驱动的东西窒息。

于 2009-01-18T03:49:05.000 回答