Дано — раскрытый фильтр по текстовому полю:
Задача — заменить текстовое поле на выпадающий список со всеми возможными значениями:
Решение —
/**
* 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
Похожие записи
- Необязательное значение одной из дат в раскрытом фильтре с оператором BETWEEN
- Сменить тип раскрытого фильтра с select на checkboxes
- Необязательное одно из двух значений раскрытого фильтра с оператором BETWEEN
- Подменить значение раскрытого фильтра Views
- Раскрытый фильтр "С фото" в виде одиночного чекбокса
Комментарии
Еще если нужна сотировка можно:
->orderBy('f.field_subcategory_value', 'ASC')
вставить перед ->execute()
где field_subcategory - имя поля
Спасибо! То, что нужно! А как сделать что бы при использовании AJAX не выдавало ошибку?
@Taras Проблемы с AJAX у Вас наверно не из-за этого кода, а какого то другого. У меня с AJAX на мультиленговом сайте все работает отлично.
Добавить комментарий