[mFilter2] Фильтрация по диапазонам значений опций товара
Добрый день!
Есть каталог товаров, у которого в фильтре по параметру «Мощность» очень много значений (10, 11, 11.2, 11.9, 12, 15.5, 13 и тд). См. скриншот ( joxi.ru/8Anw31GHNa6Per ) Каким образом можно реализовать фильтрацию по диапазонам значений? Положим, чтобы были чекбоксы 10-15, 15-20, 20-25 и тд?
Заранее спасибо за совет.
Есть каталог товаров, у которого в фильтре по параметру «Мощность» очень много значений (10, 11, 11.2, 11.9, 12, 15.5, 13 и тд). См. скриншот ( joxi.ru/8Anw31GHNa6Per ) Каким образом можно реализовать фильтрацию по диапазонам значений? Положим, чтобы были чекбоксы 10-15, 15-20, 20-25 и тд?
Заранее спасибо за совет.
Комментарии: 8
Ты сам ответил на свой вопрос))) Нужно сделать фильтрацию по диапазону чисел вместо чекбоксов.
так мне нужно именно чекбоксы с диапазонами 10-20, 20-30 и тд
Еще можно: или писать свой кастомный фильтр-формировки диапазона или извратиться немного в шаблоне-выводе так, чтобы в поисковую попадал заранее подготовленный диапазон.
а есть какие-то похожие примеры?
Делаешь диапазон, смотришь как это выглядит в get-параметрах, потом по совету @Алексей Смирнов путём хитрых манипуляций, скорее всего через отдельный сниппет, формируешь массив чекбоксов и выводишь его. ЛИБО пишешь скрипт для Console который пройдёт по всем ресурсам и добавить в созданное тобой поле диапазон. Т.е. ты задашь массив диапазонов и проверишь в какой из них каждый ресурс попадает и заполнишь свое поле. Например. Есть ресурс у которого значение мощности 11 и ты в скрипте проверяешь в какой диапазон это значение попадает, а затем это значение записываешь в отдельное поле и фильтруешь уже не по мощности, а по диапазону. Надеюсь понятно объяснил. Я так на одном своём сайте делал. Дополнительно ещё плагин написал, который при создании ресурса сразу определяет в какой диапазон он попадает.
Артур, а можешь выложить-показать этот плагин — «который при создании ресурса сразу определяет в какой диапазон он попадает»?
Примерно так
switch ($modx->event->name) {
case 'OnDocFormSave':
if ($resource->get('class_key') === 'msProduct' && $price = $resource->get('price')) {
$q = $modx->newQuery('modTemplateVarResource');
$q->where(['tmplvarid' => 1, 'contentid' => 1]); // получаем значения TV типа migx где записаны диапазоны
$q->select('value');
$ranges = $modx->getIterator('modTemplateVarResource', $q);
if ($q->prepare() && $q->stmt->execute()) {
$ranges = json_decode($q->stmt->fetch(PDO::FETCH_COLUMN), true);
foreach ($ranges as $range) {
if ($range['min'] <= $price && $range['max'] > $price) { // проверяем входит ли цена в диапазон
$resource->set('range', "{$range['min']}-{$range['max']}"); // если да, то записываем диапазон в свойство товара созданное при помощи msAddFields
break;
}
}
}
}
break;
}
Спасибо! :)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.