Здравствуйте.
Проблема следующая. Есть ноды типа "Анкета". Через cck к ней привязано поле "Возраст" (Integer)
Мне нужно, чтобы через Exposed Filter можно было фильтровать ноды по признаку "Возраст от и до".
Сделать 2 фильтра "Возраст больше или равно" и "Возраст меньше или равно" - не проблема, однако, не получается добавить дважды фильтр в Exposed по одному и тому же полю.
Есть решение?
Комментарии
А если сделать два поля?
"Возраст от"
"Возраст до"
?
Это, конечно, сработает, но представь анкету с полями:
"Фамилия"
"Имя"
"Отчество"
"Пол"
"Возраст от"
"Возраст до"
Хе-хе...
Но два одинаковых Exposed фильтра не пробовал вставлять.
У меня были анонсы. Похожая задача, но решил проблему просто модулем (Евент).
А что Вам мешает выбрать «между» (between) вместо «больше или равно» и «меньше или равно»?
Собственно, отсутствие этого варианта и мешает.
У меня только такие:
Больше
Больше или равно
Равно
Не равно
Меньше или равно
Меньше
Хм... У вас пятый Друпал (у меня шестой), а модуль Вьюс какой версии? У меня 2.2
1.6 естественно с пятеркой...
Хм-м-м... Тогда могу только посочувствовать и посоветовать переползать на шестёрку.
есть решения для пятерки добавляется фильтр «от» потом «до»
мне как-то патчили но где фиг его знает могу в личку сбросить свой вьевс модуль.
Зайди http://www.idgroup.in.ua/categories/6/2675 там цена от до площадь от до и т.д.
Ничего патчить не надо. Надо в своем модуле зарегистрировать 2 таба для вьюсов и прописать к ним соответствующие хендлеры, если интересно вот кусок моего кода, правда вам придется его переписывать под свой модуль. у меня это был диапазон цен, который не сильно отличается от Вашей задачи.
$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;
}
}
Спасибо, беру на заметку.