Класс для фильтрации по нескольким доп. свойствам.

#
Класс для фильтрации по нескольким доп. свойствам.
Нашел на этом форуме класс написанный пользователем xmm4nдля фильтрации по нескольким доп. свойствам.
Однако он не позволяет задавать фильтр по промежуткам значений, например Цена от 0 рублей до 200 рублей.

Может ли кто-нибудь подсказать как его нужно изменить чтобы он мог задавать диапазоны значений доп. свойств?
В теории, я конечно знаю, что за запрос должен получиться, но написать конструкт что-то не выходит.
Очень нужно. Буду признателен за любую помощь.

=== Текст класса ===

<?php

/**
   * Управление фильтрами
   */
  class FilterManager
  {
    /**
     * Фильтры по стандартным параметрам
     */
    private $standart_prop_filters = array ();
    /**
     * Фильтры по доп. параметрам
     */
    private $additional_prop_filters = array ();
    /**
     * Добавление фильтра по обычному параметру
     * @param Имя поля
     * @param Условие (=, >, < и т.д.)
     * @param Сравниваемое значение
     */
    public function addStandartPropertyFilter ($name, $if, $value)
    {
      $this->standart_prop_filters[] = array (
        'type'        => 0,
        'prefix'      => 'and',
        'name'        => $name,
        'if'          => $if,
        'value'       => $value,
        'sufix'       => '',
      );
    }
    /**
     * Добавление фильтра по доп. параметру
     * @param ID доп. параметра
     * @param Условие (=, >, < и т.д.)
     * @param Сравниваемое значение
     */
    public function addAdditionalPropertyFilter ($property_id, $if = '=', $value = 1)
    {
      $this->additional_prop_filters[] = array (
        'type'        => 1,
        'property_id' => $property_id,
        'if'          => $if,
        'value'       => $value,
      );
    }
    /**
     * Применение фильтров.
     * @param Переменная $param, куда следует записать все условия
     */
    public function applyFilters (&$param)
    {
      /* Фильтры по дополнительным параметрам */
      $count = count ($this->additional_prop_filters);
      if ($count == 1)
      {
        $this->additional_prop_filters[0]['prefix']  = 'and';
        $this->additional_prop_filters[0]['sufix']   = '';
      } else if ($count > 0) {
        for ($i = 0; $i < $count; $i++)
        {
          if ($i == 0)
            $this->additional_prop_filters[$i]['prefix'] = 'and (';
          else
            $this->additional_prop_filters[$i]['prefix'] = 'or';
          if ($i == $count - 1)
            $this->additional_prop_filters[$i]['sufix'] = '';
          else
            $this->additional_prop_filters[$i]['sufix'] = '';
        }
        $param['sql_group_by'] = "GROUP BY shop_items_catalog_table.shop_items_catalog_item_id";
        $param['sql_having'] = "HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = ".$count;
      }
      if (count ($this->standart_prop_filters) > 0 || count ($this->additional_prop_filters) > 0)
        $param['select'] = array_merge ($this->standart_prop_filters, $this->additional_prop_filters);
    }
  }
#
Re: Класс для фильтрации по нескольким доп. свойствам.
Yukimura писал(а):
как его нужно изменить чтобы он мог задавать диапазоны значений доп. свойств?
- не совсем понятно, зачем использовать этот сторонний код, если в системе стандартно предусмотрен способ отображения свойства в форме фильтре в виде диапазона: "От.. до..". И обрабатывается отображенное т.о. доп. свойство после отправки формы фильтра на сервер будет соответственно(см. в коде стандартной тип. дин. страницы интернет-магазина).
#
Re: Класс для фильтрации по нескольким доп. свойствам.
Просто удобно, меньше кода писать при вызове, да и ошибиться труднее. Да и потом, стандартный фильтр не всегда устраивает. Иногда нужно отдельную страницу с поиском делать, как в моем случае. Типовую дин. страницу я смотрел, но с ходу , увы, не сообразил где там нужно поправить, чтобы переделать универсальный блок отображения доп. свойства в конкретный.
Авторизация