Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/catalog/lib/v2/Helpers/ |
Upload File : |
<?php namespace Bitrix\Catalog\v2\Helpers; use Bitrix\Catalog\Product\PropertyCatalogFeature; use Bitrix\Catalog\v2\IoC\ServiceContainer; use Bitrix\Catalog\v2\Sku\BaseSku; /** * Class PropertyValue * * @package Bitrix\Catalog\v2\Iblock * * * !!! This API is in alpha stage and is not stable. This is subject to change at any time without notice. * @internal */ final class PropertyValue { /** * @param BaseSku $sku * @return string */ public static function getSkuPropertyDisplayValues(BaseSku $sku): string { if ($sku->isSimple()) { return ''; } $propertyValues = self::getPropertyValues( $sku->getIblockId(), [$sku->getId()] ); $skuPropertyValues = $propertyValues[$sku->getId()] ?? []; return self::getPropertyDisplayValues($skuPropertyValues); } /** * @param BaseSku $sku * @return array property code => property fields (including DISPLAY_VALUE) */ public static function getSkuPropertyDisplayValuesMap(BaseSku $sku): array { if ($sku->isSimple()) { return []; } $propertyValues = self::getPropertyValues( $sku->getIblockId(), [$sku->getId()] ); $skuPropertyValues = $propertyValues[$sku->getId()] ?? []; $result = []; foreach ($skuPropertyValues as $property) { $displayValue = self::getPropertyDisplayValue($property); if (!$displayValue) { continue; } $property['DISPLAY_VALUE'] = $displayValue; $result[$property['CODE']] = $property; } return $result; } /** * @param $skuIblockId * @param array $skuIds * @return array */ private static function getPropertyValues($skuIblockId, array $skuIds): array { $propertyIds = PropertyCatalogFeature::getOfferTreePropertyCodes($skuIblockId); if ($propertyIds === null) { return []; } $propertyValues = []; \CIBlockElement::GetPropertyValuesArray( $propertyValues, $skuIblockId, ['ID' => $skuIds], ['ID' => $propertyIds] ); return $propertyValues; } /** * @param BaseSku $sku * @return array */ public static function getPropertyValuesBySku(BaseSku $sku): array { return self::getPropertyValues($sku->getIblockId(), [$sku->getId()])[$sku->getId()]; } /** * @param array $properties * @return string */ private static function getPropertyDisplayValues(array $properties): string { $result = []; foreach ($properties as $property) { $displayValue = self::getPropertyDisplayValue($property); if (!$displayValue) { continue; } $result[] = $displayValue; } return implode(', ', $result); } /** * @param array $propertyValue * @return string */ public static function getPropertyDisplayValue(array $propertyValue): string { if (!empty($propertyValue['USER_TYPE'])) { $userType = \CIBlockProperty::GetUserType($propertyValue['USER_TYPE']); $searchMethod = $userType['GetSearchContent'] ?? null; if ($searchMethod && is_callable($searchMethod)) { $value = $searchMethod($propertyValue, ['VALUE' => $propertyValue['~VALUE']], []); } else { $value = ''; } } else { $value = $propertyValue['~VALUE'] ?? ''; } if (is_array($value)) { $value = implode(', ', $value); } $value = trim((string)$value); return $value; } }