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>
。总是。我指定的任何值都将被忽略。我该如何设置默认值?
答案 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查询参数传递。例如,如果过滤器具有单个值:
如果过滤器可以有多个值: