Исключить выбранные ресурсы mFilter2

Добрый день!

Прошу помощь в настройке mFilter2. Задача, наоборот исключить ресурсы которые выбраны в фильтре и показать все, которые не попадают в запрос.

Например, имеются 3 товара, у каждого (в поле msoption) задана дата или несколько дат:

Товар 1 — [15.10.2024, 25.10.2024]
Товар 2 — [25.10.2024 ]
Товар 3 — [31.10.2024]

Пользователь в запросе, указывает начальную и конечную дату (например msoption|date_close=25.10.2024,30.10.2024), соответственно из выборки должны исключиться Товар 1 и Товар 2, т.к. содержат число 25.10.2024.

Расширяем класс фильтрации

public function filterAvailability(array $requested, array $values, array $ids, $format = 'd.m.Y') {
 $matched = array();

   $min = min($requested);
   $max = max($requested);
      foreach ($values as $number => $resources) {

      if ($number < $min || $number > $max) { 
            foreach ($resources as $id) {
              $matched[] = $id;
                 }
      }
    }
    return $matched;
	}

Работает. Фильтр исключает Товар 2, но не исключает Товар 1 (где указано больше одной даты).

Напишите пожалуйста, если есть решение, как сделать инверсию фильтрации. Готов задонатить за решение. Уже 3 дня, никак… Спасибо!
Roman
14 октября 2024, 14:40
modx.pro
118
0

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

Артур Шевченко
17 октября 2024, 21:23
+1
но не исключает Товар 1 (где указано больше одной даты)
Посмотри тут
    Roman
    20 октября 2024, 20:40
    0
    Из примера

    $match = $matched;
            $matched = array();
            $count = count($requested);
            $count_values = array_count_values($match);
    
            foreach ($count_values as $id => $value) {
                if ($value >= $count) {
                    $matched[] = $id;
                } else {
                    $matched[] = 0;
                }
            }


    $count = count($requested);
    Получает количество значений в запросе
    $count_values = array_count_values($match);
    Получает количество значений в множественном поле ресурса

    Можно это применить, чтобы исключить все ресурсы у которых больше одного значения в поле, в моем случае, нужно чтобы исключались те, у которых любое значение совпадает с запросом.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2