Index: branches/5.2.x/core/units/filters/item_filter_tp.php =================================================================== diff -u -N -r15086 -r15091 --- branches/5.2.x/core/units/filters/item_filter_tp.php (.../item_filter_tp.php) (revision 15086) +++ branches/5.2.x/core/units/filters/item_filter_tp.php (.../item_filter_tp.php) (revision 15091) @@ -76,16 +76,29 @@ $cache[$cache_key]['counts'] = $this->Conn->GetCol($count_sql, 'GroupField'); } elseif ( $filter_type == 'range' ) { - $max_sql = str_replace('COUNT(*) AS count', 'MAX(' . $field_sql . ')', $sql); - $max_value = $this->Conn->GetOne($max_sql); + $filter_params = $this->Application->GetVar('filter_params', Array ()); + $filter_params = isset($filter_params[$filter_field]) ? $filter_params[$filter_field] : Array (); + if ( isset($filter_params['max_value']) ) { + $max_value = $filter_params['max_value']; + } + else { + $max_sql = str_replace('COUNT(*) AS count', 'MAX(' . $field_sql . ')', $sql); + $max_value = $this->Conn->GetOne($max_sql); + } + if ( !$max_value ) { return ''; } $range_start = 0; $range_count = $object->GetDBField('RangeCount'); $max_value = $this->getClosestValue($max_value / $range_count) * $range_count; + + if ( $max_value <= $range_count ) { + $range_count = floor($range_count / 2); + } + $range_size = $max_value / $range_count; // $range_size = ceil( $max_value / $range_count ); @@ -165,6 +178,11 @@ $this->Application->SetVar('max_range_value', $max_value); $range_count = $object->GetDBField('RangeCount'); + + if ( $max_value <= $range_count ) { + $range_count = floor($range_count / 2); + } + $range_size = $max_value / $range_count; $this->Application->SetVar('range_step', $range_size); @@ -286,9 +304,19 @@ */ protected function SliderHeight($params) { - $object =& $this->getObject($params); - /* @var $object kDBItem */ + // range count could be dynamically changed in PrintFilterOptions tag + $max_value = $this->Application->GetVar('max_range_value'); - return $object->GetDBField('RangeCount') * $params['factor']; + if ( $max_value !== false ) { + $range_count = $max_value / $this->Application->GetVar('range_step'); + } + else { + $object =& $this->getObject($params); + /* @var $object kDBItem */ + + $range_count = $object->GetDBField('RangeCount'); + } + + return $range_count * $params['factor']; } }