Этот код перебирает для всех возможных вариантов значений свойства, все возможные варианты значений для других свойств, чтобы их подсветить.
Непонятно зачем нужно перебирать всё, когда фильтр не выбран. Поэтому добавил условие if ($_CHECK) :
if ( $_CHECK )
{
foreach($arResult["ITEMS"] as $PID => $arItem)
{
$combo = $arResult["COMBO"];
/*filter all possible property values combinations*/
$this->filterCombinations($combo, $arResult["ITEMS"], $PID);
$combo = $this->combineCombinations($combo);
foreach($arItem["VALUES"] as $key => $ar)
{
if($arItem["PROPERTY_TYPE"] != "N" && !isset($arItem["PRICE"]))
{
if(!is_array($combo[$PID]) || !in_array($ar["VALUE"], $combo[$PID]))
$arResult["ITEMS"][$PID]["VALUES"][$key]["DISABLED"] = true;
}
}
}
}
Результат 0.0095 с, если пользователь (или бот) просто зашел на страницу без выбора фильтра:
К сожалению, проблему так просто не решить. Это код надо обязательно переписать. Ведь при выборе фильтра все-равно есть тормоза:
Время работы умного фильтра зависит не от количества товаров или количества свойств. А от количества комбинаций значений свойств.
Ответ техподдержки #411370 : Разработчику известно об этой проблеме, но в настоящее время исправление логики работы умного фильтра не планируется. Заявка в отделе разработки была закрыта без исправления.
Было бы еще очень хорошо иметь возможность в умном фильтре показывать количество выбранных элементов при клике на соответствующий пункт фильтра, например, как тут: http://rozetka.com.ua/notebooks/c80004/filter/, эта система очень популярная и часто используется, в текущей версии умного фильтра её очень нехватает.
Smirnov Maxim, спасибо! Переделывал умный фильтр, удалось снизить время создания страницы с 40 сек. до 5-6 сек. Но используя и ваш код в сочетании с моим, удалось снизить время до 0,5 - 1 сек. Отлично
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».