设置表单公开的过滤器默认值

时间:2014-02-04 11:56:59

标签: drupal drupal-7

Ajax表单。带有-Any-的外露过滤器。在hook_form_alter()我写道:

if ($form_id == 'views_exposed_form') {
    if ($form_state['view']->name == 'machinery') {
        $form['field_producer_tid']['#options']['All'] = t('-All-');
    }
    $form['field_producer_tid']['#default_value'] = "All";
    dsm($form);
}

但默认值是选择列表中的第二个<option>。总是。我指定的任何值都将被忽略。我该如何设置默认值?

6 个答案:

答案 0 :(得分:4)

根据https://drupal.org/node/1239868,您将不得不使用其他一些钩子。 你可以尝试

/**
 * Implements hook_views_pre_build().
 */
function YOUR_MODULE_views_pre_build(&$view) {
  if ($view->name == 'machinery') {
    $view->filter['field_producer_tid']->value = "All";
  }
}

这样,您就可以选择默认值。

答案 1 :(得分:3)

万一你(就像我一开始)过度阅读Df.fpm对botanic_spark答案的评论, 完整且有效的答案(截至7.32)如下:

function YOUR_MODULE_views_pre_build(&$view) {
  if ($view->name == 'VIEW_NAME') {
    $view->filter['FIELD_ID']->value = "All";
    $view->exposed_input['FIELD_ID'] = "All";
  }
}

只有添加第二行才有效!

答案 2 :(得分:2)

如果是ajax视图,上述解决方案将不允许您在过滤器之间切换。 我找到了这个解决方案,可能会有更好的解决方案,但这样可行。

/**
 * Implements hook_form_alter().
 */
function HOOK_form_alter(&$form, &$form_state, $form_id) {
  if($form_id == 'views_exposed_form' && $form_state['view']->name =='VIEW_NAME') {
    $q = drupal_get_query_parameters();
    $form_state['input']['FIELD_ID'] = 'ALL';
    if($q['FIELD_ID']) {
    $form_state['input']['field_7_step_refernce_tid'] = $q['FIELD_ID'];
    }
  }
} 

答案 3 :(得分:1)

我确实通过执行以下操作来实现这一目标:

我更改了过滤器状态值

  

$视图 - &GT;显示[$视图 - &GT; current_display] - GT; handler-&GT;处理程序[ '过滤器'] [ '状态'] - &GT;值

/**
 * Implements hook_views_pre_build().
 */
function my_module_views_pre_build(&$view) {
  // Check if the current view is the orders view.
  if ($view->name == 'commerce_backoffice_orders') {
    if($view->current_display == 'page_1') {
      if (empty($view->display[$view->current_display]->handler->handlers['filter']['status']->value)) {
        $view->display[$view->current_display]->handler->handlers['filter']['status']->value = 'pending';
      }
    }
    elseif ($view->current_display == 'page_2') {
      if (empty($view->display[$view->current_display]->handler->handlers['filter']['status']->value)) {
        $view->display[$view->current_display]->handler->handlers['filter']['status']->value = 'processing';
      }
    }
  }
}

答案 4 :(得分:1)

此解决方案适用于 Drupal> = 8

function YOURMODULE_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form['#id'] == 'views-exposed-form-my-view-display') {
    $request = \Drupal::request();
    if (is_null($request->get('EXPOSED_FILTER_FIELD_MACHINE_NAME'))) {
      $form_state->setUserInput(['EXPOSED_FILTER_FIELD_MACHINE_NAME' => 'DEFAULT_VALUE']);
    }
  }
}

答案 5 :(得分:0)

这对我来说效果更好:

默认值可以作为URL查询参数传递。例如,如果过滤器具有单个值:

  • /路径/到/视图?FIELD_ID =默认值

如果过滤器可以有多个值:

  • /路径/到/视图?FIELD_ID%5B%5D =默认值