Ярослав Пономарев Обновлен 10 лет назад в категории CMS Общий функционал 0
Андрей Викторов Обновлен 10 лет назад в категории CMS Общий функционал 2
Денис Ефремов Обновлен 10 лет назад в категории CMS Общий функционал 0
/**
 * Вычисляем характеристики, для которых нет в наличии товаров
 * @param  {obj} 		selected  		Массив выбранных характеристик checkEmptyOffers
 */
checkEmptyOffers = function(selected) {
    // Из массива выбранного делаем объекты данных для каждой хар-ки отдельно
    selected.forEach(function(el, i) {
        // Исключаем выбранное значение из возможных
        var t = selected.filter(function(v, idx) {
            return idx != i;
        });
        disableOptions({ // готовим объект и передаем его метод для изменения DOM
            name: el.title, // имя хар-ки по которой проходим
            activeValue: el.value, // выбранное значение хар-ки
            disabled: [], // сюда отфильтруются только нулевые остатки из всех siblings (ниже)
            // фильтруем компл, оставим только актуальные для выбранных значений
            siblings: data.options.multiOffersInfo.filter(function(v) {
            	// здесь ишем чтобы не совпадало с выбранной по которой проходим но совпадало с
                return v.info.every(function(a) { // выбранными остальными
                    return (a[0] == el.title && a[1] != el.value) || t.some(function(o) {
                        return JSON.stringify(o) === JSON.stringify({ // объекты только так сравнивать)))
                            title: a[0],
                            value: a[1]
                        });
                    });
                });
            })
        });
    });
}, 
// @TODO перенести формирование disabled в метод checkEmptyOffers, тк disableOptions должен только DOM заниматься
// @TODO избавиться от промежуточного siblings.
/**
 * Зачеркиваем характеристики
 * @param  {obj}	data	Массив данных
 */
disableOptions = function(d) {
    var $listEl = $('[data-prop-title="' + d.name + '"]'),
        $items,
        getValueByName = function(name, info) { // хелпер. @TODO вынести объявление рядом с in_array()
        	return info.filter(function(ar) {
        		return ar[0] == name;
        	})[0][1];
        };
    d.disabled = d.siblings.filter(function(s) { // сюда фильтруем только остатки 0
        s.title = d.name;
        s.value = getValueByName(s.title, s.info);
        return s.num < 1;
    }); // @TODO этот фильтр в checkEmptyOffers вместо siblings
    
    // Далее нужно получить набор $items $(jQuery(obj))
    $items = getItems
    
    // И само зачеркивание
    $items.removeClass('empty');
    d.disabled.forEach(function(val) {
    	$items.each(function(i, el) {
    		var _this = $(this);
    		if (_this.text().trim() == val.value) {
    			_this.addClass('empty');
    		}
    	});
    });
},
Алексей Ч Обновлен 10 лет назад в категории CMS Общий функционал 1
Andrey Vas Обновлен 10 лет назад в категории CMS Общий функционал 9
Виталий Савченко Обновлен 10 лет назад в категории CMS Общий функционал 1
Иван Головинов Обновлен 10 лет назад в категории CMS Общий функционал 7
Дмитрий Петухов Обновлен 10 лет назад в категории CMS Общий функционал 3
Дмитрий Петухов Обновлен 10 лет назад в категории CMS Общий функционал 3
Алекс Бодров Обновлен 10 лет назад в категории CMS Общий функционал 10