25 use CurrencyListItems;
26 use PrefixableDataProviderTrait;
28 private const VARIATION_PREFIX =
'VARIATION_';
34 parent::__construct($settings);
36 $variationIblockId = $settings->getVariationIblockId();
37 if ($variationIblockId > 0)
43 private function isWithVariations(): bool
45 return isset($this->variationFields);
50 $result = parent::prepareFields();
100 if ($this->isWithVariations())
102 $result += $this->prepareVariationElementFields();
113 private function prepareVariationElementFields():
array
125 $properties = $this->variationFields->getElementPropertiesParams();
126 foreach ($properties as $id =>
$params)
131 $nameWithPrefixTemplate = Loc::getMessage(
'CATALOG_FILTER_PRODUCT_DATAPROVIDER_NAME_WITH_PREFIX');
133 return $this->prepareFieldsByPrefix(self::VARIATION_PREFIX,
$result, $nameWithPrefixTemplate);
141 if ($fieldID ===
'PURCHASING_CURRENCY')
144 'items' => $this->getCurrencyListItems(),
147 elseif ($fieldID ===
'MEASURE')
150 'items' => $this->getMeasureListItems(),
153 elseif ($fieldID ===
'TYPE')
163 $result = parent::prepareFieldData($fieldID);
169 if ($this->isWithVariations())
171 return $this->prepareVariationFieldData($fieldID);
177 private function prepareVariationFieldData(
string $fieldIdWithPrefix): ?
array
179 $fieldID = $this->removePrefix(self::VARIATION_PREFIX, $fieldIdWithPrefix);
181 return $this->variationFields->getPropertyDescription($fieldID);
189 return Loc::getMessage(
'CATALOG_FILTER_PRODUCT_DATAPROVIDER_FIELD_' . $fieldID) ?? parent::getFieldName($fieldID);
197 $rawFilterValue = parent::prepareFilterValue($rawFilterValue);
199 if (!$this->isWithVariations() || empty($rawFilterValue))
201 return $rawFilterValue;
204 [$variationFilterValue, $rawFilterValue] = $this->splitPrefixFilterValues(self::VARIATION_PREFIX, $rawFilterValue);
206 if (!empty($variationFilterValue))
208 $variationFilterValue = $this->variationFields->prepareFilterValue($variationFilterValue);
211 $variationFilterValue[
'IBLOCK_ID'] = $settings->getVariationIblockId();
212 $rawFilterValue[
'SUBQUERY'] = [
213 'FIELD' =>
'PROPERTY_' . $settings->getLinkPropertyId(),
214 'FILTER' => $variationFilterValue,
219 return $rawFilterValue;
createField($fieldID, array $params=null)
static requireModule($moduleName)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)