Фильтрация в mFilter2
Добрый вечер!
Возникла проблема такого характера: есть каталог с фильтрацией с помощью mFilter2. Одна группа фильтров почему-то перебивает остальные. Если выбран один фильтр из этой группы, то выборка остальных никак не влияет на результат — страница перезагружается, а результаты не меняются. В чем может быть проблема?
Спасибо!
UPD:
Спасибо за отклики, но проблему удалось решить самостоятельно.
Естественно опишу ее решение здесь.
У меня в ресурсах находилась таблица MIGX из 7 строк, где каждая строка это определенный тип товара со своими характеристиками (название типа было первым элементом каждой строки). Фильтрация ресурсов необходима была по типам товаров. Опираясь на данный вариант bezumkin.ru/modx/minishop2/msearch2/1805/ мной был написан свой класс фильтрации для таблицы:
Дело оказалось в одной переменной, которая была пропущена по неопытности — $ids. Она содержала в себе ресурсы, выборка которых происходит по другим фильтрам. Соответственно мне надо было находить пересечение массива $ids с результатом работы моего фильтра. Иначе у меня выводился результат работы только моего фильтра, без учета предыдущих:
Всем спасибо!
Возникла проблема такого характера: есть каталог с фильтрацией с помощью mFilter2. Одна группа фильтров почему-то перебивает остальные. Если выбран один фильтр из этой группы, то выборка остальных никак не влияет на результат — страница перезагружается, а результаты не меняются. В чем может быть проблема?
Спасибо!
UPD:
Спасибо за отклики, но проблему удалось решить самостоятельно.
Естественно опишу ее решение здесь.
У меня в ресурсах находилась таблица MIGX из 7 строк, где каждая строка это определенный тип товара со своими характеристиками (название типа было первым элементом каждой строки). Фильтрация ресурсов необходима была по типам товаров. Опираясь на данный вариант bezumkin.ru/modx/minishop2/msearch2/1805/ мной был написан свой класс фильтрации для таблицы:
<?php
class myCustomFilter extends mse2FiltersHandler {
public function buildTypeWFilter(array $values, $name = '') {
if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
return array();
}
$results = array();
foreach ($values as $value => $ids) {
$items = json_decode($value, true);
foreach($items as $key => $value2){
$results[$value2['type']] = array(
'title' => $value2['type'],
'value' => $value2['type'],
'type' => 'typeW',
'resources' => $ids
);
}
}
ksort($results);
return $results;
}
public function filterTypeW(array $requested, array $values, array $ids) {
$matched = array();
foreach ($requested as $value) {
foreach ($values as $vkey => $val){
$fil = json_decode($vkey, true);
foreach ($fil as $t) {
if (trim($t['type']) === trim($value)) {
$matched[] = $val[0];
}
}
}
}
return $matched;
}
}Фильтрация работала, но при этом если выбран элемент из моего фильтра, то выбор в других группах фильтров никак не влиял на результат. Дело оказалось в одной переменной, которая была пропущена по неопытности — $ids. Она содержала в себе ресурсы, выборка которых происходит по другим фильтрам. Соответственно мне надо было находить пересечение массива $ids с результатом работы моего фильтра. Иначе у меня выводился результат работы только моего фильтра, без учета предыдущих:
return array_intersect($matched, $ids);Если это кому-то помогло — я рад)Всем спасибо!
Комментарии: 3
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
код выложить?
как наглядно показать проблему?