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

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

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

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

Решение:

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

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

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

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

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

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

Не могу никак сообразить где найти 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

****

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

- Все -С фото

debug($form);

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

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

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