Фильтрация в 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
дай посмотреть
я извиняюсь — что именно мне показать?
код выложить?
как наглядно показать проблему?
код выложить?
как наглядно показать проблему?
ссылку на сайт дай где не работает, то что ты описываешь достаточно мистично, надо посмотреть
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.