【问题标题】:Drupal Views2 Exposed Form how to changeDrupal Views2 Exposed Form如何更改
【发布时间】:2009-01-16 19:59:22
【问题描述】:

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

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

【问题讨论】:

    标签: drupal drupal-6 drupal-views


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,大卫的建议是合理的。要在非 JS 客户端上完全降级,请将按钮保留在那里,但使用 JS 将其删除或隐藏。但是,您仍然可以使用 hook_form_alter() 添加调用 drupal_add_js 的主题函数。
      • 您是否修改了选择下拉菜单以添加 onChange 处理程序?
      • 只有在你移除按钮的情况下,否则 Drupal 无法知道视图的暴露过滤器已经更新。不过,您不需要提交页面,如果您通过 Ajax 加载结果,您可能可以使用该页面,但需要某种 onChange 处理程序。
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        该模块提供自动提交功能http://drupal.org/project/views_hacks

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

        【讨论】:

        • 这是一个项目页面,不太可能改变。
        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-04
          • 2011-06-09
          相关资源
          最近更新 更多