Динамическая категория по характеристике и фильтр по ней же.

2

Имеем динамическую категорию сделанную по характеристике(типа Выбор нескольких возможных вариантов (checkbox):Текст).
Почти все товары имеют несколько значений это характеристики. Но в фильтре динамической категории присутствует только одно значение этой характеристики - то, которое задано при её создании.
Посмотрел код wa-apps/shop/lib/actions/frontend/shopFrontendCategory.action.php и видим там в execute()

if ($category['type'] == shopCategoryModel::TYPE_DYNAMIC) {
            $conditions = shopProductsCollection::parseConditions($category['conditions']);
            foreach ($conditions as $field => $field_conditions) {
                switch ($field) {
                    case 'price':
<SKIP>
                        break;
                    default:
                        if (preg_match('@(\w+)\.(value_id)$@', $field, $matches)) {
                            $feature_code = $matches[1];
                            $value_id = array_map('intval', preg_split('@[,\s]+@', end($field_conditions)));
                            $feature_id = ifset($feature_map[$feature_code], $feature_code);
                            if (!isset($category_filters[$feature_id])) {
                                $category_filters[$feature_id] = array();
                            }
                            $category_filters[$feature_id] += array(
                                'code' => $feature_code,
                            );
                            if (!empty($filter_data[$feature_code])) {
                                //$filter_data[$feature_code] = array_intersect($filter_data[$feature_code], $value_id);
                            } else {
                                $filter_data[$feature_code] = $value_id;
                            }

                            if (!empty($filters[$feature_id]['values'])) {
                                foreach ($filters[$feature_id]['values'] as $_value_id => $_value) {
                                    if (!in_array($_value_id, $value_id)) {
                                        unset($filters[$feature_id]['values'][$_value_id]);
                                    }
                                }
                            }
                        }
                        break;
                }
            }
        }

конкретно вот это в дефолтовом кейсе:

                            if (!empty($filters[$feature_id]['values'])) {
                                foreach ($filters[$feature_id]['values'] as $_value_id => $_value) {
                                    if (!in_array($_value_id, $value_id)) {
                                        unset($filters[$feature_id]['values'][$_value_id]);
                                    }
                                }
                            }

для чего? зачем? Я хочу видеть все значения этой характеристики, чтобы по ней тоже фильтровать можно было.
Есть логичное объяснение для чего это сделано? Если есть, то сделать возможность настройки в динамической категории для вкл/выкл этого условия.
Если нет, то убрать это условие из кода магазина совсем.


2 комментария

  • +1

    Вряд ли это ошибка. Максимум - неудачная задумка. При создании такой категории вы указываете не только характеристику, но и её конкретное значение. Все вышеприведенное - следствие заложенной логики. Почему уж так - судить не берусь. Но то что в динамической категории можно указать лишь одно значение выбранной характеристики - да, порой мешает и не единожды обсуждалось. Тут например.

  • +1

    Да, я читал. Но нигде не увидел ответа от webasyst, а сам дотумкать пока не могу, для чего оно сделано.
    И потому спрашиваю напрямую - для чего конкретно последнее условие по удалению всех остальных значений этой характеристики сделано? Есть ли офигенно важный смысл в этом?


    Добавить комментарий

    Чтобы добавить комментарий, зарегистрируйтесь или войдите