Если кому-то поможет (особенно при переходе с 1.6 на 1.7.6.4), модуль 4.12.9 подвисает на большом количестве фильтров. Таблицы в БД совпадают по структуре. В файле pm_advancedsearch4.php в корне модуля необходимо с 3347 строки привести к такому виду (до конца функции
Если не сложно - не могли бы приложить свой вариант файла - несколько запутался?
Получается вот это:
foreach ($result[$key]['criterions'][$criterions_group['id_criterion_group']] as $criterion_group) {
$removeCriterionGroup = (isset($criterion_group['nb_product']) && $criterion_group['nb_product'] == $result[$key]['total_products']);
if (!$removeCriterionGroup && !isset($criterion_group['nb_product']) && $criterions_group['display_type'] == 5 && isset($criterion_group['min'], $criterion_group['max']) && $criterion_group['min'] == $criterion_group['max']) {
if ($criterions_group['criterion_group_type'] == 'price') {
$removeCriterionGroup = true;
} else {
$selected_criterion[(int)$criterions_group['id_criterion_group']] = array($criterion_group['min'] . '~' . $criterion_group['max']);
$selected_criteria_groups_type[(int)$criterions_group['id_criterion_group']] = $criterions_group;
$nb_product = As4SearchEngine::getProductsSearched((int)$row['id_search'], As4SearchEngine::cleanArrayCriterion($selected_criterion), $selected_criteria_groups_type, null, null, true);
$removeCriterionGroup = ($nb_product == $result[$key]['total_products']);
}
}
if ($removeCriterionGroup) {
unset($result[$key]['criterions_groups'][$criterions_group_key]);
unset($result[$key]['criterions'][$criterions_group['id_criterion_group']]);
}
}
}
}
}
}
if (empty($result[$key]['id_seo']) && !empty($result[$key]['hide_empty_crit_group']) && empty($result[$key]['display_empty_criteria']) && (isset($result[$key]['total_products']) && $result[$key]['total_products'] == 0) && (($result[$key]['filter_by_emplacement'] && $result[$key]['selected_criterion'] == $result[$key]['selected_criterion_from_emplacement']) || (!$result[$key]['filter_by_emplacement'] && !self::_isFilledArray($result[$key]['selected_criterion'])))) {
unset($result[$key]);
}
}
$return[$cacheKey] = $result;
return $result;
}
Нужно заменить вот на это:
foreach ($result[$key]['criterions'][$criterions_group['id_criterion_group']] as $criterion_group) {
if (isset($criterion_group['nb_product']) && $criterion_group['nb_product'] == $result[$key]['total_products']) {
unset($result[$key]['criterions_groups'][$criterions_group_key]);
unset($result[$key]['criterions'][$criterions_group['id_criterion_group']]);
}
}
}
}
}
}
}
$return[$cacheKey] = $result;
return $result;
}
Верно я понял?