Drupal → Сменить тип поля в раскрытом фильтре Views

21.04.2011

Дано — раскрытый фильтр по текстовому полю:

Раскрытый фильтр

Задача — заменить текстовое поле на выпадающий список со всеми возможными значениями:

Изменённый раскрытый фильтр

Решение —

/**
 * Implements hook_form_FORM_ID_alter().
 */
function mymodule_form_views_exposed_form_alter(&$form, $form_state) {
  if ($form['#id'] == 'ID_ФОРМЫ') {
    $field_name = 'field_subcategory'; // имя поля
    $all_values = db_select('field_data_' . $field_name, 'f')
      ->fields('f', array($field_name . '_value'))
      ->distinct()
      ->execute()
      ->fetchCol();     

    $exposed_field_name = $form['#info']['filter-' . $field_name . '_value']['value'];
    $form[$exposed_field_name]['#type'] = 'select';
    $form[$exposed_field_name]['#options'] = array('' => '') + drupal_map_assoc($all_values);
    $form[$exposed_field_name]['#size'] = 1;
  }
}

ID_ФОРМЫ можно узнать, открыв html код и посмотрев у раскрытой формы атрибут id.

По материалам Views exposed filters for CCK field with allowed values list.

Написанное актуально для
Drupal 7.x, Views 3.x
Похожие записи

Комментарии

Еще если нужна сотировка можно:
->orderBy('f.field_subcategory_value', 'ASC')
вставить перед ->execute()
где field_subcategory - имя поля

Спасибо! То, что нужно! А как сделать что бы при использовании AJAX не выдавало ошибку?

@Taras Проблемы с AJAX у Вас наверно не из-за этого кода, а какого то другого. У меня с AJAX на мультиленговом сайте все работает отлично.

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