[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;
}            
                Спасибо! :)            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.