xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

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

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

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

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

Решение —

/**
 * 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
Похожие записи

Комментарии RSS

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании