Нашел на этом форуме класс написанный пользователем
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);
}
}