Как заставить mFilter2 работать наоборт?

У товара есть текстовое TV-поле, в котором перечислены параметры через разделитель. В данном случае это список дат вида 2018-07-01||2018-07-02||2018-07-06...

Вывожу через 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;
  	}

  }

Что нужно изменить, чтобы выполнить эту задачу?
Александр
03 июля 2018, 17:15
modx.pro
839
0

Комментарии: 1

Александр
03 июля 2018, 20:42
0
Заменил
return $matched;
на
return array_diff($ids, $matched);
Вроде работает
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1