Как заставить mFilter2 работать наоборт?
У товара есть текстовое TV-поле, в котором перечислены параметры через разделитель. В данном случае это список дат вида 2018-07-01||2018-07-02||2018-07-06...
Вывожу через mFilter2 стандартными чекбоксами. Как сделать, чтобы при выборе фильтра, отображались все товары, кроме тех, в которых присутствует выбранная дата?
Сейчас всё работает по умолчанию, выбираю 2018-07-02 — отфильтровываются товары в которых присутствует эта дата. А нужно наоборот.
Расширил стандартный класс по инструкции:
Что нужно изменить, чтобы выполнить эту задачу?
Вывожу через mFilter2 стандартными чекбоксами. Как сделать, чтобы при выборе фильтра, отображались все товары, кроме тех, в которых присутствует выбранная дата?
Сейчас всё работает по умолчанию, выбираю 2018-07-02 — отфильтровываются товары в которых присутствует эта дата. А нужно наоборот.
Расширил стандартный класс по инструкции:
<?php
class custom_filters extends mse2FiltersHandler {
public function buildInvertFilter(array $values, $name = '') {
if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
return array();
}
$results = array();
foreach ($values as $value => $ids) {
if ($value !== '') {
$results[$value] = array(
'title' => $value,
'value' => $value,
'type' => 'default',
'resources' => $ids
);
}
}
return $this->sortFilters($results, 'default', array('name' => $name));
}
public function filterInvert(array $requested, array $values, array $ids) {
$matched = array();
$tmp = array_flip($ids);
foreach ($requested as $value) {
$value = str_replace('"', '"', $value);
if (isset($values[$value])) {
$resources = $values[$value];
foreach ($resources as $id) {
if (isset($tmp[$id])) {
$matched[] = $id;
}
}
}
}
return $matched;
}
}
Что нужно изменить, чтобы выполнить эту задачу?
Комментарии: 1
Заменил
return $matched;
на return array_diff($ids, $matched);
Вроде работает
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.