/** * Установка активности поля в зависимости от набранных фильтров */ protected function setState(&$arField) { $bNeedRestoreFields = $bNeedRestoreKFields = false; $fields_filter = isset($_REQUEST['fields_filter']) ? $_REQUEST['fields_filter'] : array(); $k_fields_filter = isset($_REQUEST['k_fields_filter']) ? $_REQUEST['k_fields_filter'] : array(); $field_name = $arField['name']; if (isset($fields_filter[$field_name])) { $bNeedRestoreFields = $fields_filter[$field_name]; unset($_REQUEST['fields_filter'][$field_name]); } if (isset($k_fields_filter[$field_name])) { $bNeedRestoreKFields = $k_fields_filter[$field_name]; unset($_REQUEST['k_fields_filter'][$field_name]); } $iFieldId = $arField['id']; switch ($arField['type']) { case "boolean": $sel = $this->getCurrentCountSelection(); $sel->addPropertyFilterEqual($iFieldId, 1); $sqls = umiSelectionsParser::parseSelection($sel); $query_key = trim(str_replace(array("\n", "\r", "\t", " "), "", $sqls['count'])); $count = 0; //Count of goods with this value, with selected filters but without filering on this field if ($query_key) { $oCache = kFilters::getInstance($this->catalogId)->getCache(); //try load from cache $count = $oCache->getQuery($query_key, $this->catalogId); if (is_null($count)) { $count = umiSelectionsParser::runSelectionCounts($sel); //save to cache $oCache->saveQuery($count, $query_key, $this->catalogId); } } if ($count == 0) { $arField['active'] = false; } else { $arField['active'] = true; } break; case "option": $arValues = $arField['values']; foreach ($arValues as $i => $arValue) { $sel = $this->getCurrentCountSelection(); $sel->addPropertyFilterEqual($iFieldId, $arValue['id']); $sqls = umiSelectionsParser::parseSelection($sel); $query_key = trim(str_replace(array("\n", "\r", "\t", " "), "", $sqls['count'])); $count = 0; //Count of goods with this value, with selected filters but without filering on this field if ($query_key) { $oCache = kFilters::getInstance($this->catalogId)->getCache(); //try load from cache $count = $oCache->getQuery($query_key, $this->catalogId); if (is_null($count)) { $count = umiSelectionsParser::runSelectionCounts($sel); //save to cache $oCache->saveQuery($count, $query_key, $this->catalogId); } } if ($count == 0) { $arField['values'][$i]['active'] = false; } else { $arField['values'][$i]['active'] = true; } } break; } if ($bNeedRestoreFields !== false) { $_REQUEST['fields_filter'][$field_name] = $bNeedRestoreFields; } if ($bNeedRestoreKFields !== false) { $_REQUEST['k_fields_filter'][$field_name] = $bNeedRestoreKFields; } }