Views как сделать exposed filter интервалом?

Прислано: Shaltay

вс, 28/12/2008 - 21:11

Другие статьи по теме:

Здравствуйте.

Проблема следующая. Есть ноды типа "Анкета". Через cck к ней привязано поле "Возраст" (Integer)

Мне нужно, чтобы через Exposed Filter можно было фильтровать ноды по признаку "Возраст от и до".

Сделать 2 фильтра "Возраст больше или равно" и "Возраст меньше или равно" - не проблема, однако, не получается добавить дважды фильтр в Exposed по одному и тому же полю.

Есть решение?

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано Shagi в вс, 28/12/2008 - 21:55.

А если сделать два поля?
"Возраст от"
"Возраст до"
?


Опубликовано Shaltay в вс, 28/12/2008 - 21:58.

"Shagi" написал(а):

А если сделать два поля?
"Возраст от"
"Возраст до"
?

Это, конечно, сработает, но представь анкету с полями:

"Фамилия"
"Имя"
"Отчество"
"Пол"
"Возраст от"
"Возраст до"

:-)


Опубликовано Shagi в вс, 28/12/2008 - 22:27.

Хе-хе...
Но два одинаковых Exposed фильтра не пробовал вставлять.
У меня были анонсы. Похожая задача, но решил проблему просто модулем (Евент).


Опубликовано ingumsky@drupal.org в вс, 28/12/2008 - 22:34.

А что Вам мешает выбрать «между» (between) вместо «больше или равно» и «меньше или равно»?


Опубликовано Shaltay в вс, 28/12/2008 - 22:58.

"ingumsky@drupal.org" написал(а):

А что Вам мешает выбрать «между» (between) вместо «больше или равно» и «меньше или равно»?

Собственно, отсутствие этого варианта и мешает.

У меня только такие:

Больше
Больше или равно
Равно
Не равно
Меньше или равно
Меньше


Опубликовано ingumsky@drupal.org в вс, 28/12/2008 - 23:01.

Хм... У вас пятый Друпал (у меня шестой), а модуль Вьюс какой версии? У меня 2.2


Опубликовано Shaltay в вс, 28/12/2008 - 23:11.

"ingumsky@drupal.org" написал(а):

Хм... У вас пятый Друпал (у меня шестой), а модуль Вьюс какой версии? У меня 2.2

1.6 естественно с пятеркой...


Опубликовано ingumsky@drupal.org в вс, 28/12/2008 - 23:37.

Хм-м-м... Тогда могу только посочувствовать и посоветовать переползать на шестёрку.


Опубликовано yasik в пн, 29/12/2008 - 00:04.

есть решения для пятерки добавляется фильтр «от» потом «до»
мне как-то патчили но где фиг его знает могу в личку сбросить свой вьевс модуль.
Зайди http://www.idgroup.in.ua/categories/6/2675 там цена от до площадь от до и т.д.


Опубликовано glu2006 в пн, 29/12/2008 - 08:06.

Ничего патчить не надо. Надо в своем модуле зарегистрировать 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;
   }
}


Опубликовано Tesmon в чт, 27/08/2009 - 19:44.

Спасибо, беру на заметку.


Новое на сайте

Ссылки партнёров