Drupal → Раскрытый фильтр "С фото" в виде одиночного чекбокса

18.04.2015

Задача — дать возможность пользователю выводить только материалы с изображениями, а по умолчанию выводить материалы как с фото так и без:

Решение:

1. Добавляем раскрытый фильтр по "Content: Имя поля (машинное_имя_поля:fid)":

2. В опции Filter type to expose выбираем значение Grouped filters:

3. В первом групповом фильтре прописываем заголовок "С фото", оставляем оператор "is equal to", а значение изменяем на 1. Остальные групповые фильтры удаляем:

4. Меняем оператор фильтра на "is not empty (NOT NULL)":

5. Сохраняем фильтр. Получаем:

6. Добавляем в template.php:

/**
 * Implements hook_form_FORM_ID_alter(): views_exposed_form.
 */
function THEMENAME_form_views_exposed_form_alter(&$form, &$form_state) {
  if ($form['#id'] == 'id-раскрытой-формы') {
    $field_image_name = 'имя_поля';
    $element = &$form[$field_image_name];
    $element['#type'] = 'checkbox';
    $element['#title'] = 'С фото';
    $element['#value'] = isset($_GET[$field_image_name]) ? $_GET[$field_image_name] : 'All';
    end($element['#options']);
    $element['#return_value'] = key($element['#options']);
  }
}
Написанное актуально для
Views 3
Похожие записи

Комментарии

Если реализуешь hook_form_FORM_ID_alter, то уже не надо делать проверку $form['#id'] == 'id-раскрытой-формы'.

у всех раскрытых форм только один альтер - hook_form_views_exposed_form_alter

можно проще сделать через better exposed filters
связь по полю картинки, фильтр по статусу файла, включаем множественный выбор, чекбоксы, скрываем все варианты кроме Постоянный

хотя видимо все равно понадобится хук форм алтер, чтобы поменять слово Постоянный на С фото

Гость
09.05.2016, 09:39

Не могу никак сообразить где найти id-раскрытой-формы и имя_поля (делаю первые шаги)
Вот такая конструкция в template.php темы не срабатывает:
/**
* Implements hook_form_FORM_ID_alter(): views_exposed_form.
*/
function THEMENAME_form_views_exposed_form_alter(&$form, &$form_state) {
if ($form['#id'] == 'views-exposed-form-adsmain-page') {
$field_image_name = 'field_picture';
$element = &$form[$field_image_name];
$element['#type'] = 'checkbox';
$element['#title'] = 'С фото';
$element['#value'] = isset($_GET[$field_image_name]) ? $_GET[$field_image_name] : 'All';
end($element['#options']);
$element['#return_value'] = key($element['#options']);
}
}
И кусок html

****

Главное изображение

- Все -С фото

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