Для Ильи Макарова.
Добавьте, пожалуйста, необходимые хуки в ядро, чтобы можно было модульно сделать наши модификации. Сейчас приходится править файл ядра и следить за ним, чтобы он не перезатирался после каждого обновления.
Файл fn.catalog.php
1. fn_set_hook('get_product_feature_variants', $fields, $join, $condition, $group_by, $sorting, $lang_code, $limit);
Почему-то в вашем хуке нет важного аргумента - передача параметров. Для некоторых модификаций это необходимо. Добавьте, пожалуйста:
fn_set_hook('get_product_feature_variants', $fields, $join, $condition, $group_by, $sorting, $lang_code, $limit, $params);
2. function fn_generate_feature_conditions {}
В этой функции не хватает хука, чтобы можно было менять переменные $join и $condition. В хук необходимо передавать все параметры.
3. function fn_get_filters_products_count {}
Часть кода:
if (!empty($params['features_hash']) && empty($params['skip_advanced_variants'])) {
... ... ...
if (sizeof($variant_filter_ids) == 1 && sizeof($selected_filters) == 1) {
$filter_id = key($variant_filter_ids);
$available_variants[$filter_id] = $variant_values[$filter_id];
}
Для наших модификаций
if (sizeof($variant_filter_ids) == 1 && sizeof($selected_filters) == 1) {
$filter_id = key($variant_filter_ids);
$available_variants[$filter_id] = $variant_values[$filter_id];
}
это является излишним, мы комментируем эти строчки. Посмотрите, пожалуйста, действительно ли это необходимо? Это условие логически не дублируется ли?
С помощью пунктов 2 и 3 мы меняем логику работы множественного фильтра (типа М), чтобы варианты фильтра срабатывали не как ИЛИ то ИЛИ это, а как И то И это, в зависимости от настроек в админке у каждой характеристики.
Например, есть у нас фильтр "Функции душевой кабины" со множеством значений. В текущей логике можно выбрать несколько значений фильтра и будет показываться набор товаров, у которых присутствует одна из выбранных функций. Но клиенту нужно, как правило, выбрать кабину, у которой есть одновременно несколько функций. Этого сделать получается нельзя. А разбивать все возможные функции кабины, а их может быть десятки, на отдельные фильтры, чтобы решить задачу - это абсурд, слишком много фильтров замусорят все и клиент потеряется в этих фильтрах. Поэтому в зависимости от настроек в админке у определенной характеристики, мы меняем логику работы конкретного фильтра, но для этого приходится править файл ядра fn.catalog.php
Спасибо.