[mFilter2] Фильтрация по диапазонам значений опций товара

Добрый день!
Есть каталог товаров, у которого в фильтре по параметру «Мощность» очень много значений (10, 11, 11.2, 11.9, 12, 15.5, 13 и тд). См. скриншот ( joxi.ru/8Anw31GHNa6Per ) Каким образом можно реализовать фильтрацию по диапазонам значений? Положим, чтобы были чекбоксы 10-15, 15-20, 20-25 и тд?
Заранее спасибо за совет.
Giant Dad
26 апреля 2022, 14:58
modx.pro
925
0

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

Артур Шевченко
26 апреля 2022, 16:25
0
Ты сам ответил на свой вопрос))) Нужно сделать фильтрацию по диапазону чисел вместо чекбоксов.
    Giant Dad
    26 апреля 2022, 20:55
    0
    так мне нужно именно чекбоксы с диапазонами 10-20, 20-30 и тд
    Алексей Смирнов
    26 апреля 2022, 16:35
    0
    Еще можно: или писать свой кастомный фильтр-формировки диапазона или извратиться немного в шаблоне-выводе так, чтобы в поисковую попадал заранее подготовленный диапазон.
      Giant Dad
      26 апреля 2022, 20:56
      0
      а есть какие-то похожие примеры?
        Артур Шевченко
        26 апреля 2022, 21:32
        0
        Делаешь диапазон, смотришь как это выглядит в get-параметрах, потом по совету @Алексей Смирнов путём хитрых манипуляций, скорее всего через отдельный сниппет, формируешь массив чекбоксов и выводишь его. ЛИБО пишешь скрипт для Console который пройдёт по всем ресурсам и добавить в созданное тобой поле диапазон. Т.е. ты задашь массив диапазонов и проверишь в какой из них каждый ресурс попадает и заполнишь свое поле. Например. Есть ресурс у которого значение мощности 11 и ты в скрипте проверяешь в какой диапазон это значение попадает, а затем это значение записываешь в отдельное поле и фильтруешь уже не по мощности, а по диапазону. Надеюсь понятно объяснил. Я так на одном своём сайте делал. Дополнительно ещё плагин написал, который при создании ресурса сразу определяет в какой диапазон он попадает.
          Дмитрий Вершинин
          23 июня 2024, 17:35
          0
          Артур, а можешь выложить-показать этот плагин — «который при создании ресурса сразу определяет в какой диапазон он попадает»?
            Артур Шевченко
            23 июня 2024, 18:38
            0
            Примерно так
            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;
            }
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    8