select в views exposed filter

По-умолчанию в exposed filters используются поля textfield для cck полей типа string, куда пользователь может вбить значения фильтра. А что нам делать если требуется сделать такой вариант:

Т.е. нужно дать пользователю возможность выбрать значения полей, которые заполнены у нод.

Одно из решений - это переопределить форму exposed filters. Делаем это в своем модуле, ловим форму через функцию my_module_form_views_exposed_form_alter

my_module_form_views_exposed_form_alter(&$form, $form_state) {
 //ловим форму по id
 if ($form['#id'] == 'views-exposed-form-uc-products-clock-page-1'){
  if ($form['mechanism'] != NULL){
   $mechanism = array('All' => t('<All>'));
   //делаем выборку всех доступных значений, убираем дубликаты
   $result = db_query("SELECT DISTINCT field_mechanism_value FROM {content_type_product}");
   while ($row = db_fetch_array($result)){
    $key = $row['field_mechanism_value'];
    if ($key){
        $mechanism[$key] = $row['field_mechanism_value'];
    }
   }
   $form['mechanism']['#type'] = 'select';  
   $form['mechanism']['#size'] = 1;
   $form['mechanism']['#default_value']='All';
   $form['mechanism']['#options'] = $mechanism;
   if(!isset($_REQUEST['mechanism'])){
         $form['mechanism']['#value']='All';
   }
  }
 }
}

Комментарии

Оставить сообщение

Картинка