Drupal → Подменить значение раскрытого фильтра Views

06.09.2015

На dru.io задали хороший вопрос — Как подменить значение раскрытого фильтра.

Ответ:

Drupal 8

/**
 * Implements hook_form_FORM_ID_alter(): views_exposed_form.
 */
function MODULENAME_form_views_exposed_form_alter(array &$form, FormStateInterface $form_state) {
  $view = $form_state->get('view'); /** @var ViewExecutable $view */

  if ($view->id() == 'myview' && $view->current_display == 'page') {
    array_unshift($form['#submit'], 'MODULENAME_form_views_exposed_form_submit');
  }
}

/**
 * Custom submit callback for views exposed form.
 */
function MODULENAME_form_views_exposed_form_submit(array $form, FormStateInterface &$form_state) {
  $form_state->setValue('имя_фильтра', 'новое_значение');
}

Drupal 7

/**
 * Implements hook_form_FORM_ID_alter(): views_exposed_form.
 */
function MODULENAME_form_views_exposed_form_alter(&$form, &$form_state) {
  if ($form_state['view']->name == 'myview' && $form_state['view']->current_display == 'page') {
    array_unshift($form['#submit'], 'MODULENAME_form_views_exposed_form_submit');
  }
}

/**
 * Custom submit callback for views exposed form.
 * @see views_exposed_form_submit()
 */
function MODULENAME_form_views_exposed_form_submit($form, &$form_state) {
  $form_state['values']['имя_фильтра'] = 'новое_значение';
}
Написанное актуально для
Views 3, Views 8.x
Похожие записи

Комментарии

Виктор
09.09.2015, 11:04

А как подставить в поле (список элементов таксономии) раскрытого фильтра определенное значение из этого словаря как значение по-умолчанию? Я его получаю из SESSION, но не в этом суть.

Виктор
09.09.2015, 15:07

Собственно, сам додумался:

if ($form_id == 'views_exposed_form') {
   $view = $form_state['view'];
   if ($view->name == 'list_indexed') {
      $form['my_field_filter']['#default_value'] = $_SESSION['my_variable'];
   }
}

А если подмену осуществлять с помощью hook_views_query_alter(), есть ли недостатки у такого подхода?

Добавить комментарий