Не могу настроить зависимые фильтры в mFilter2
        Всем здравствуйте!
Не могу настроить зависимые фильтры в mFilter2
Документацию по mSearch2 читал, там прям скрипт готовый есть.
docs.modx.pro/komponentyi/msearch2/tipovyie-resheniya/zavisimyie-filtryi
И он отлично работает, только одно НО, при условии — марка: Ford, модель Ford Galaxy (то есть название модели включает в себя марку).
А у меня в базе модель просто Galaxy (без Ford) и базу быстро не поменяешь 35 тыс товаров.
Хоть js я и начал учить, но не получается пока, не хватает знаний), я так понимаю data-атирибуты нужны в модели?
Вот такой вопрос собственно, может ли кто-то помочь, может у кого-то есть наработки такие, код или встречался с похожей ситуацией?
Буду признателен за помощь, спасибо!
    
    
                                                                                
            Не могу настроить зависимые фильтры в mFilter2
Документацию по mSearch2 читал, там прям скрипт готовый есть.
docs.modx.pro/komponentyi/msearch2/tipovyie-resheniya/zavisimyie-filtryi
И он отлично работает, только одно НО, при условии — марка: Ford, модель Ford Galaxy (то есть название модели включает в себя марку).
А у меня в базе модель просто Galaxy (без Ford) и базу быстро не поменяешь 35 тыс товаров.
Хоть js я и начал учить, но не получается пока, не хватает знаний), я так понимаю data-атирибуты нужны в модели?
Вот такой вопрос собственно, может ли кто-то помочь, может у кого-то есть наработки такие, код или встречался с похожей ситуацией?
Буду признателен за помощь, спасибо!
Комментарии: 13
                Думаю ntt нужно переписать вот эту функцию
                    // Функция включения моделей
    enableModel: function() {
        // Получаем марку автомобиля
        var marka = this.marka.find(':selected').text().replace(/\(.*?\)$/, '').replace(/\s+$/, '');
        var re = new RegExp('^' + marka);
        // Пробегаем по всем моделям и проверяем имя
        $this.model.find('option').each(function() {
            var $this = $(this);
            // Имя не совпадает - нужно отключить эту модель
            if (!$this.text().match(re) && $this.prop('value') != '') {
                $this.attr('disabled', true);
                $this.hide();
            }
            // В противном случае - включить
            else {
                $this.attr('disabled', false);
                $this.show();
            }
        });
        // И показываем весь блок с моделями
        $this.model.show();
    },
}if (!$this.text().match(re) && $this.prop('value') != '')
                Спасибо за ответ. Может быть у вас есть какой-то вариант кода, глянуть, чтобы понять последовательность? а то мне не хватает навыков еще чтобы самому написать это.            
                    
                Всем привет, присоединяюсь к вопросу. Такая же ситуация, есть марка Kia, а в модели название марки отсутствует и дублировать название марки в модели как-то не красиво. Как в таком случае найти решение?            
                    
                У вас нет привязки, поэтому нужно либо сделать привязку.
Вроде такой модели:
                    Вроде такой модели:
var phoneModels = {
  "Apple": ["iPhone 13 Pro Max", "iPhone 13 Pro", "iPhone 13", "iPhone 13 mini", "iPhone XS Max", "iPhone XS", "iPhone 12", "iPhone 12 mini", "iPhone 11", "iPhone SE 2020"],
  "Samsung": ["Galaxy A23 4/64GB KZ", "Galaxy A23 6/128GB KZ", "Galaxy A33 5G 6/128GB KZ", "Galaxy A73 5G 6/128GB KZ", "Galaxy A73 5G 8/256GB KZ", "Galaxy Z Flip3 5G 8/128GB", "Galaxy Z Fold3 5G 12/256GB", "Galaxy Z Fold3 5G 12/256GB", "Galaxy S21 5G 8/128GB", "Galaxy A52 4/128GB", "Galaxy S21 5G 8/128GB", "Galaxy S21 5G 8/256GB", "Galaxy S21 FE 6/128GB", "Galaxy A33 5G 6/128GB KZ", "Galaxy A53 5G 6/128GB KZ", "Galaxy S21 FE 6/128GB", "Galaxy A53 5G 8/256GB KZ", "Galaxy S21 FE 6/128GB KZ", "Galaxy A73 5G 6/128GB KZ", "Galaxy A33 5G 6/128GB KZ", "Galaxy A53 5G 6/128GB KZ", "Galaxy A13 4/64GB KZ", "Galaxy S21 FE 6/128GB", "Galaxy S20 FE G780G 6/128GB", "Galaxy A52 4/128GB", "Galaxy A32 6/128GB AE", "Galaxy S22 8/128GB KZ", "Galaxy A52 4/128GB KZ", "Galaxy A13 4/64GB KZ", "Galaxy A13 4/128GB KZ", "Galaxy A73 5G 6/128GB KZ", "Galaxy A23 4/64GB KZ", "Galaxy A23 6/128GB KZ", "Galaxy A22s 5G 4/64GB", "Galaxy M32 6/128GB", "Galaxy A32 4/64GB"]
};
                Спасибо за подсказку.            
                    
                В итоге я решил вопрос так.
1) Создал объект с марками и моделями (по наводке Романа, еще раз спасибо!)
Что-то такое:
Если кто-то может поделиться своим вариантом, возможно более удачным, буду признателен. Спасибо!
                    1) Создал объект с марками и моделями (по наводке Романа, еще раз спасибо!)
Что-то такое:
var carsModelsObject = {
    "Alfa Romeo": {
        "146": [],
        "147": [],
        "156": []    
    },
    "Audi": {
        "80": [],
        "90": [],
        "100": [],
        "A2": [],
        "A3": [],
        "A4": [],
        "A5": [],
        "A6": [],
        "A6 Allroad": [],
        "A8": [],
        "Q2": [],
        "Q3": [],
        "Q5": [],
        "Q7": [],
        "TT": [],
        "V8": [],
    },
// и так далее по всем маркам...
}<script>
      window.onload = function() {
        var carSel = document.getElementById("msoption|marka_0"); // мои названия опций
        var modelSel = document.getElementById("msoption|model_0"); // мои названия опций
    
        for (var x in carsModelsObject) {
            carSel.options[carSel.options.length] = new Option(x, x);
        }
        carSel.onchange = function() {
    
            modelSel.length = 1;
          //display correct values
          for (var y in carsModelsObject[this.value]) {
            modelSel.options[modelSel.options.length] = new Option(y, y);
          }
        }
      }
    </script>Если кто-то может поделиться своим вариантом, возможно более удачным, буду признателен. Спасибо!
                Дмитрий добрый вечер, можете подсказать что есть объект для начинающего? Это внешний xml файл, с таким содержимым?
Со скриптом понятно, а что с объектом делать не пойму…
Заранее спасибо, буду очень благодарен.
                    var carsModelsObject = {
    "Alfa Romeo": {
        "146": [],
        "147": [],
        "156": []    
    },
    "Audi": {
        "80": [],
        "90": [],
        "100": [],
        "A2": [],
        "A3": [],
        "A4": [],
        "A5": [],
        "A6": [],
        "A6 Allroad": [],
        "A8": [],
        "Q2": [],
        "Q3": [],
        "Q5": [],
        "Q7": [],
        "TT": [],
        "V8": [],
    },
// и так далее по всем маркам...
}Со скриптом понятно, а что с объектом делать не пойму…
Заранее спасибо, буду очень благодарен.
                Объект это элемент и термин языка программирования, в данном случае JS. Это массив данных, вот в примере выше как раз, которым можно манипулировать. Источник данных может быть любым. А именно объект в контексте разговора это логический элемент языка. В него можно поместить данные. Данными можно манипулировать. Откуда они берутся — это уже десятый разговор.            
                    
                Спасибо!!! Разобрался) Но почему-то стали дублироваться в фильтре марки и модели: disk.yandex.ru/i/W-3JcFircMkXsg
Вывожу так же, только объект другой:
Корректная строка:
                    Вывожу так же, только объект другой:
<script>
var carsModelsObject = {
    "KIA": {
        "Rio 3 QBR (11-17)": [],
        "Rio 4 FB (2017- )": [],
        "Soul 3 SK3 (2019- )": [],
        "Creta 1 GSR (2016-21)":[]
    },
    "Hyundai": {
        "Solaris 1 RBR (10-17)": [],
        "Solaris 2 HCR (2017- )": []
    }
}
</script>
<script>
      window.onload = function() {
        var carSel = document.getElementById("msoption|marka_0"); // мои названия опций
        var modelSel = document.getElementById("msoption|model_0"); // мои названия опций
    
        for (var x in carsModelsObject) {
            carSel.options[carSel.options.length] = new Option(x, x);
        }
        carSel.onchange = function() {
    
            modelSel.length = 1;
          //display correct values
          for (var y in carsModelsObject[this.value]) {
            modelSel.options[modelSel.options.length] = new Option(y, y);
          }
        }
      }
    </script>Корректная строка:
https://rioek.ru/zapchasti/?marka=KIA&model=Soul%203%20SK3%20(2019-%20)https://rioek.ru/zapchasti/?marka=KIA&model=KIA%20Soul%203%20SK3%20(2019-%20)
                Добрый вечер, а ваши названия в опциях товара точно соответствуют названиям из объекта?
К примеру в объекте "KIA«заглавными, а в свойстве товара случаем не „Kia“?
                    К примеру в объекте "KIA«заглавными, а в свойстве товара случаем не „Kia“?
                Так точно, скриншот: disk.yandex.ru/i/aat_f5elJpEbrg            
                    
                Может и поздновато), но тут же тогда отлично подходит скрипт из документации 
(так как название модели начинается на выбранную марку)
docs.modx.pro/komponentyi/msearch2/tipovyie-resheniya/zavisimyie-filtryi
                    (так как название модели начинается на выбранную марку)
docs.modx.pro/komponentyi/msearch2/tipovyie-resheniya/zavisimyie-filtryi
                Да, согласен. Не заметил сразу, дублируется марка при использовании этого скрипта. 

Может кто-то подсказать почему так?
Делал так:
1) Создал объект с марками и моделями
2) Сам скрипт
Спасибо!
                    
Может кто-то подсказать почему так?
Делал так:
1) Создал объект с марками и моделями
var carsModelsObject = {
    "Alfa Romeo": {
        "146": [],
        "147": [],
        "156": []    
    },
    "Audi": {
        "80": [],
        "90": [],
        "100": [],
        "A2": [],
        "A3": [],
        "A4": [],
        "A5": [],
        "A6": [],
        "A6 Allroad": [],
        "A8": [],
        "Q2": [],
        "Q3": [],
        "Q5": [],
        "Q7": [],
        "TT": [],
        "V8": [],
    },
// и так далее по всем маркам...
}2) Сам скрипт
<script>
      window.onload = function() {
        var carSel = document.getElementById("msoption|marka_0"); // мои названия опций
        var modelSel = document.getElementById("msoption|model_0"); // мои названия опций
    
        for (var x in carsModelsObject) {
            carSel.options[carSel.options.length] = new Option(x, x);
        }
        carSel.onchange = function() {
    
            modelSel.length = 1;
          //display correct values
          for (var y in carsModelsObject[this.value]) {
            modelSel.options[modelSel.options.length] = new Option(y, y);
          }
        }
      }
    </script>Спасибо!
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    
             
             
                    
                    
                





