我有一个暴露的形式的视图。我想在这几件事情。理想情况下,我想有没有按钮会形式下拉。如果这是不可能的,那么我想有按钮上的文字的东西比采用不同的。

我砍死它现在和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;
}
有帮助吗?

解决方案

如果您想在下拉火灾,我会使用JavaScript,而不是黑客的模块作为伊顿建议。

基本上,你可以修改与hook_form_alter文本作为伊顿建议,然后以同样的hook_form_alter使用,添加一个调用,您的自定义JS里面隐藏的按钮,提交关于选择下拉菜单的onChange处理形式drupal_add_js 。你想,有用户的那些10%,对他们来说,JS无法提交按钮。

其他提示

或者,你可以使用一个预处理功能改变,甚至之前,它是建立形式。我想改变按钮上的文字,所以我这样做:

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

以上两者都很好,但我发现改变形式可能并不总是导致理想的结果,主要是因为暴露的过滤器使用的是specifc主题模板主题。更改主题的正确方法是将覆盖你的主题文件夹中的文件views-exposed-form.tpl。请记住,这将适用于所有暴露的过滤器形式,主题特定的一个,你需要使用不同的名称为文件名,如:

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

和其他一些人,你可以检查主题:信息你的视图模板命名约定款

您应该能够使用hook_form_alter()( http://api.drupal.org / API /功能/ hook_form_alter )来改变形式,如它的建成,修改所涉及的领域正在显示该特定视图时。你可以攻击的提交按钮,添加调用drupal_add_js一个#theme()函数中,等等。

只要进来的方式欣赏GET PARAMS指望他们,一切都将正常工作 - 它是这样设计的,以便与暴露的过滤器设置,网页书签等的重要组成部分,是确保你这样的形式在自己的模块的hook_form_alter()函数的重整,所以它不会使其他视图带动东西噎。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top