
Методы фильтрации 
mFilter2 может фильтровать информацию из любых таблиц, главное, чтобы вы описали, как её получить.
Для этого предусмотрена возможность расширения класса фильтрации, который находится в /core/components/msearch2/model/msearch2/filters.class.php через системную настройку mse2_filters_handler_class.
Для расширения стандартного класса, вам нужно создать новый файл в директории /core/components/msearch2/custom/filters/ с именем имя.class.php и унаследовать mse2FiltersHandler.
<?php
class myCustomFilter extends mse2FiltersHandler {
  // Здесь можно переопределить методы родительского класса, или создать собственные
}Всего есть 3 типа методов:
- Получение информации для фильтрации - методы get
ИмяValues. - Приготовление фильтров для вывода - методы build
ИмяFilter. - Собственно, проведение фильтрации по параметру - методы filter
Имя. 
Эти методы обрабатывают значения, указанные в параметре &filters. Например:
&filters=`
  resource|parent:categories,
  resource|template:default,
  ms|price:number,
  tv|myname:default,
  msoption|size:default
`Первое слово - кодовое имя метода для выборки данных из таблиц. Если указан resource, то будет вызван getResourceValues, если ms, то getMsValues, и т.д.
Второе слово - это поле, которое выбирается. Для одной таблицы можно указывать несколько полей, главное, чтобы они существовали в ней.
Третье слово - это имя применяемого метода для построения фильтра, и самой фильтрации. Если указано default, то будут вызваны buildDefaultFilter и filterDefault, если number, то buildNumberFilter и filterNumber и т.д.
Таким образом, у нас получаются стандартные методы класса фильтрации
| Метод | Имя в &filters | Что делает | 
|---|---|---|
getResourceValues | resource | Выбирает данные для указанных полей ресурса | 
getTvValues | tv | Выбирает данные для указанных ТВ параметров | 
getMsValues | ms | Выбирает данные для для указанных полей товара MS2 | 
getMsOptionValues | msoption | Выбирает данные из специальной таблицы JSON полей товара MS2 | 
buildDefaultFilter | default | Строит фильтр по умолчанию, состоящий их чекбоксов | 
buildNumberFilter | number | Строит фильтр для чисел, который можно вывести в виде слайдера | 
buildVendorsFilter | vendors | Строит фильтр, в котором значениями являются имена производителей товаров MS2. Можно применять только к полю vendor `ms | 
buildBooleanFilter | boolean | Строит фильтр для булевых значений. Нужен для того, чтобы вместо 0 и 1 вы видели "Да" и "Нет". | 
buildParentsFilter | parents | Строит фильтр, в котором выбираются и показываются два родителя ресурса. Можно применять только к полю parent `resource | 
buildCategoriesFilter | categories | Строит фильтр, в котором выбирается и показывается один родитель ресурса. Можно применять только к полю parent `resource | 
buildGrandParentsFilter | grandparents | Строит фильтр, в котором выбираются и показываются второй родитель ресурса. Можно применять только к полю parent `resource | 
buildFullnameFilter | fullname | Строит фильтр, в котором выбираются и показываются полные имена пользователей. Можно применять только к id юзера, например `resource | 
buildYearFilter | year | Строит фильтр, в котором показывается год, например `resource | 
filterDefault | default | Обычная фильтрация, работает по умолчанию, если нет специального метода. | 
filterGrandParents | grandparents | Специальная фильтрация по второму родителю (дедушке ресурса). | 
filterNumber | number | Специальная фильтрация по диапазонам числовых значений. | 
filterYear | year | Специальная фильтрация по дате. | 
Вы можете переопределить любой из этих методов, или создать свой.
Возвращаемые значения 
Первый тип методов должен возвращать такой массив значений:
Array (
  [ИмяПоля 1] => array(
    [Значение1] => array(
      [0] => id подходящего ресурса
      [1] => id подходящего ресурса
      [2] => id подходящего ресурса
    ),
  ),
)Например, вызываем
&filters=`resource|parent:parents,resource|template:default`и метод getResourceValues возвращает примерно такой массив:
Array (
  [parent] => array(
    [0] => array(
      [0] => 1
      [1] => 2
    )
    [2] => array(
      [0] => 5
    )
  )
  [template] => array(
    [1] => array(
      [0] => 1
      [1] => 2
      [2] => 3
    ),
  )
)Второй тип методов возвращает массив для вывода фильтров пользователю. Формат у него такой:
Array (
  [ИмяФильтра] => Array (
    [title] => ИмяФильтра
    [value] => значение позиции фильтра
    [type] => необязательное поле с типом фильтра
    [resources] => Array (
      [0] => id подходящего ресурса
      [1] => id подходящего ресурса
      [2] => id подходящего ресурса
    )
  )
)Например, вызываем
&filters=`resource|parent:categories`и метод getResourceValues возвращает примерно такой массив:
Array (
  [Tickets] => Array (
    [title] => Tickets
    [value] => 71
    [type] => parents
    [resources] => Array (
      [0] => 72
      [1] => 73
      [2] => 74
    )
  )
  [mSearch2] => Array (
    [title] => mSearch2
    [value] => 62
    [type] => parents
    [resources] => Array (
      [0] => 63
      [1] => 64
    )
  )
)Ну а третий тип методов должен принять 3 массива:
- Массив с запрошенными значениями
 - Массив имеющихся значений, где ключами являются значения фильтров, а значениями - подходящие ресурсы
 - Текущий массив результатов
 
Например, если мы фильтруем по родителю, то в первом массиве придут id требуемых родителей:
Array (
  [0] => 71
)Во-втором придёт массив имеющихся родителей с их ресурсами:
Array (
  [71] => Array (
    [0] => 72
    [1] => 73
    [2] => 74
  )
)А в третьем придут id ресурсов, которые еще участвуют в фильтрации и не были исключены другими фильтрами:
Array (
  [0] => 72
  [1] => 73
  [2] => 74
  [3] => 75
  [4] => 76
)Мы должны сравнить первый массив с ключами второго и значениями третьего, после чего вернуть массив ресурсов, которые прошли проверку. Этот массив попадёт или в другой фильтр, если он есть, или будет отдан mFilter2 для вывода отфильтрованных ресурсов.
Таким образом, пользователь увидит только те результаты, которые прошли все фильтры.
