Исключить выбранные ресурсы 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.
Расширяем класс фильтрации
Работает. Фильтр исключает Товар 2, но не исключает Товар 1 (где указано больше одной даты).
Напишите пожалуйста, если есть решение, как сделать инверсию фильтрации. Готов задонатить за решение. Уже 3 дня, никак… Спасибо!
Прошу помощь в настройке 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 дня, никак… Спасибо!
Комментарии: 2
но не исключает Товар 1 (где указано больше одной даты)Посмотри тут
Из примера
Можно это применить, чтобы исключить все ресурсы у которых больше одного значения в поле, в моем случае, нужно чтобы исключались те, у которых любое значение совпадает с запросом.
$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);
Получает количество значений в множественном поле ресурсаМожно это применить, чтобы исключить все ресурсы у которых больше одного значения в поле, в моем случае, нужно чтобы исключались те, у которых любое значение совпадает с запросом.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.