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.
Комментарии
Еще если нужна сотировка можно:
->orderBy('f.field_subcategory_value', 'ASC')
вставить перед ->execute()
где field_subcategory - имя поля
Спасибо! То, что нужно! А как сделать что бы при использовании AJAX не выдавало ошибку?
@Taras Проблемы с AJAX у Вас наверно не из-за этого кода, а какого то другого. У меня с AJAX на мультиленговом сайте все работает отлично.
Оставить комментарий