Динамическая категория по характеристике и фильтр по ней же.
Имеем динамическую категорию сделанную по характеристике(типа Выбор нескольких возможных вариантов (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 комментария
Вряд ли это ошибка. Максимум - неудачная задумка. При создании такой категории вы указываете не только характеристику, но и её конкретное значение. Все вышеприведенное - следствие заложенной логики. Почему уж так - судить не берусь. Но то что в динамической категории можно указать лишь одно значение выбранной характеристики - да, порой мешает и не единожды обсуждалось. Тут например.
Да, я читал. Но нигде не увидел ответа от webasyst, а сам дотумкать пока не могу, для чего оно сделано.
И потому спрашиваю напрямую - для чего конкретно последнее условие по удалению всех остальных значений этой характеристики сделано? Есть ли офигенно важный смысл в этом?