Views как сделать exposed filter интервалом?
Прислано: Shaltay
вс, 28/12/2008 - 21:11
Здравствуйте.
Проблема следующая. Есть ноды типа "Анкета". Через cck к ней привязано поле "Возраст" (Integer)
Мне нужно, чтобы через Exposed Filter можно было фильтровать ноды по признаку "Возраст от и до".
Сделать 2 фильтра "Возраст больше или равно" и "Возраст меньше или равно" - не проблема, однако, не получается добавить дважды фильтр в Exposed по одному и тому же полю.
Есть решение?
- Shaltay's blog
- Для комментирования войдите или зарегистрируйтесь
А если сделать два поля?
"Возраст от"
"Возраст до"
?
- Для комментирования войдите или зарегистрируйтесь
А если сделать два поля?
"Возраст от"
"Возраст до"
?
Это, конечно, сработает, но представь анкету с полями:
"Фамилия"
"Имя"
"Отчество"
"Пол"
"Возраст от"
"Возраст до"
:-)
- Для комментирования войдите или зарегистрируйтесь
Хе-хе...
Но два одинаковых Exposed фильтра не пробовал вставлять.
У меня были анонсы. Похожая задача, но решил проблему просто модулем (Евент).
- Для комментирования войдите или зарегистрируйтесь
А что Вам мешает выбрать «между» (between) вместо «больше или равно» и «меньше или равно»?
- Для комментирования войдите или зарегистрируйтесь
А что Вам мешает выбрать «между» (between) вместо «больше или равно» и «меньше или равно»?
Собственно, отсутствие этого варианта и мешает.
У меня только такие:
Больше
Больше или равно
Равно
Не равно
Меньше или равно
Меньше
- Для комментирования войдите или зарегистрируйтесь
Хм... У вас пятый Друпал (у меня шестой), а модуль Вьюс какой версии? У меня 2.2
- Для комментирования войдите или зарегистрируйтесь
Хм... У вас пятый Друпал (у меня шестой), а модуль Вьюс какой версии? У меня 2.2
1.6 естественно с пятеркой...
- Для комментирования войдите или зарегистрируйтесь
Хм-м-м... Тогда могу только посочувствовать и посоветовать переползать на шестёрку.
- Для комментирования войдите или зарегистрируйтесь
есть решения для пятерки добавляется фильтр «от» потом «до»
мне как-то патчили но где фиг его знает могу в личку сбросить свой вьевс модуль.
Зайди http://www.idgroup.in.ua/categories/6/2675 там цена от до площадь от до и т.д.
- Для комментирования войдите или зарегистрируйтесь
Ничего патчить не надо. Надо в своем модуле зарегистрировать 2 таба для вьюсов и прописать к ним соответствующие хендлеры, если интересно вот кусок моего кода, правда вам придется его переписывать под свой модуль. у меня это был диапазон цен, который не сильно отличается от Вашей задачи.
function bli_views_tables() { $tables = array(); $tables['content_type_product'] = array( 'name' => 'content_type_product', 'provider' => 'internal', 'filters' => array( 'price_from' => array( 'name' => t('Price from: Prices search for Prod_info'), 'operator' => 'views_handler_operator_gtlt', 'handler' => '_bli_views_price_filter_handler', ), 'price_to' => array( 'name' => t('Price to: Prices search for Prod_info'), 'operator' => 'views_handler_operator_gtlt', 'handler' => '_bli_views_price_filter_handler_1', ), ) ); return $tables; } function _bli_views_price_filter_handler_1($op, $filter, $filterinfo, &$query) { switch ($op) { case 'handler': if(is_numeric($filter['value'])){ $query->add_table('content_type_product', false, 1, array('left' => array('table' => 'node', 'field' => 'vid'), 'right' => array('table' => 'content_type_product', 'field' => 'field_proditem_ref_nid'))); $query->add_table('uc_products', false, 1, array('left' => array('table' => 'content_type_product', 'field' => 'nid'), 'right' => array('table' => 'uc_products', 'field' => 'nid'))); $query->add_where("uc_products.sell_price {$filter['operator']} {$filter['value']}"); $query->add_orderby('uc_products', 'sell_price', NULL); } break; } } function _bli_views_price_filter_handler($op, $filter, $filterinfo, &$query) { switch ($op) { case 'handler': $query->add_table('content_type_product', false, 1, array('left' => array('table' => 'node', 'field' => 'vid'), 'right' => array('table' => 'content_type_product', 'field' => 'field_proditem_ref_nid'))); $query->add_table('uc_products', false, 1, array('left' => array('table' => 'content_type_product', 'field' => 'nid'), 'right' => array('table' => 'uc_products', 'field' => 'nid'))); if(is_numeric($filter['value'])){ $query->add_where("uc_products.sell_price {$filter['operator']} {$filter['value']}"); } $query->add_orderby('uc_products', 'sell_price', NULL); break; } }
- Для комментирования войдите или зарегистрируйтесь
Спасибо, беру на заметку.
- Для комментирования войдите или зарегистрируйтесь


Комментарии