Документация для разработчиков
Темная тема

Как изменить значения пользовательских полей товара

Описание

Примеры работы с различными свойствами товара.

Для работы примеров необходимо создать папку /pictures рядом с исполняемым файлом примера и заполнить её картинками с названиями "1.jpg" - "6.jpg". Также в начале примера необходимо исправить значения из примера на ваши:

  • $propertyIDSelect - ID не множественного списочного свойства.
  • $propertySelectValueID - ID значения не множественного списочного свойства.
  • $propertyIDMultiSelect - ID множественного списочного свойства.
  • $propertyMultiSelectValueID - ID значений множественного списочного свойства.
  • $propertyIDFile - ID не множественного свойства типа файл.
  • $propertyIDMultiFile - ID множественного свойства типа файл.

Внимание! Для использования примера настройте работу класса CRest и подключите файл crest.php в файлах, где используется данный класс. Подробнее.

Изменение товара

$idProduct = 10339;

$propertyIDSelect = 106;
$propertySelectValueID = 85;

$propertyIDMultiSelect = 105;
$propertyMultiSelectValueID = [79, 80, 82];

$propertyIDFile = 107;
$propertyFilePathToPicture = 'pictures/1.jpg';//relative or full path on server

$propertyIDMultiFile = 108;
$propertyMultiFilePathToPicture = [//relative or full path on server
	'pictures/2.jpg',
	'pictures/3.jpg',
	'pictures/4.jpg',
];

$standardPreviewPicturePath = 'pictures/5.jpg';//relative or full path on server
$standardDetailPicturePath = 'pictures/6.jpg';//relative or full path on server

$arFields = [
	'NAME' => 'Example product 2',
	'CURRENCY_ID' => 'USD',
	'PRICE' => 4900,
	'SORT' => 500
];

$result = CRest::call(
	'crm.product.get',
	[
		'id' => $idProduct
	]
);
if (!empty($result['result']))
{
	$arProduct = $result['result'];
	if ($propertyIDSelect > 0 && $propertySelectValueID > 0)
	{
		$arFields['PROPERTY_' . $propertyIDSelect] = $propertySelectValueID;
	}

	if ($propertyIDMultiSelect > 0 && is_array($propertyMultiSelectValueID) && count($propertyMultiSelectValueID) > 0)
	{
		$arFields['PROPERTY_' . $propertyIDMultiSelect] = $propertyMultiSelectValueID;
	}

	if ($propertyIDFile > 0 && !empty($propertyFilePathToPicture) && file_exists($propertyFilePathToPicture))
	{
		$fileName = end(explode('/', $propertyFilePathToPicture));
		$arFields['PROPERTY_' . $propertyIDFile] = [
			"fileData" => [
				$fileName,
				base64_encode(file_get_contents($propertyFilePathToPicture))
			]
		];
	}
	if ($propertyIDMultiFile > 0 &&
		is_array($propertyMultiFilePathToPicture) &&
		count($propertyMultiFilePathToPicture) > 0)
	{
		foreach ($propertyMultiFilePathToPicture as $path)
		{
			if (file_exists($path))
			{
				$fileName = end(explode('/', $path));
				$arFields['PROPERTY_' . $propertyIDMultiFile][] = [
					"fileData" => [
						$fileName,
						base64_encode(file_get_contents($path))
					]
				];
			}
		}
	}
	if (!empty($standardPreviewPicturePath) && file_exists($standardPreviewPicturePath))
	{
		$fileName = end(explode('/', $standardPreviewPicturePath));
		$arFields['PREVIEW_PICTURE'] = [
			"fileData" => [
				$fileName,
				base64_encode(file_get_contents($standardPreviewPicturePath))
			]
		];
	}
	if (!empty($standardDetailPicturePath) && file_exists($standardDetailPicturePath))
	{
		$fileName = end(explode('/', $standardDetailPicturePath));
		$arFields['DETAIL_PICTURE'] = [
			"fileData" => [
				$fileName,
				base64_encode(file_get_contents($standardDetailPicturePath))
			]
		];
	}

	//delete old files
	$arPropsFile = [
		'PREVIEW_PICTURE',
		'DETAIL_PICTURE',
	];
	if ($propertyIDFile > 0)
	{
		$arPropsFile[] = 'PROPERTY_' . $propertyIDFile;
	}
	if ($propertyIDMultiFile > 0)
	{
		$arPropsFile[] = 'PROPERTY_' . $propertyIDMultiFile;
	}
	foreach ($arPropsFile as $prop)
	{
		if (empty($arFields[$prop]))//if property does not change file dont delete old file
		{
			continue;
		}

		if (!empty($arProduct[$prop]['id']))//for standard fields PREVIEW_PICTURE and DETAIL_PICTURE
		{
			$arFields[$prop][] = [
				'id' => $arProduct[$prop]['id'],
				'remove' => 'Y',
			];
		}
		elseif (!empty($arProduct[$prop]['value']['id']))//for property type file
		{
			$arFields[$prop][] = [
				'valueId' => $arProduct[$prop]['valueId'],
				'value' => [
					'id' => $arProduct[$prop]['value']['id'],
					'remove' => 'Y',
				]
			];
		}
		elseif (!isset($arProduct[$prop]['value']) && is_array($arProduct[$prop]))//for property type multiple file
		{
			foreach ($arProduct[$prop] as $file)
			{
				if (!empty($file['value']['id']))
				{
					$arFields[$prop][] = [
						'valueId' => $file['valueId'],
						'value' => [
							'id' => $file['value']['id'],
							'remove' => 'Y',
						]
					];
				}

			}
		}
	}

	$result = CRest::call(
		'crm.product.update',
		[
			'id' => $idProduct,
			'fields' => $arFields
		]
	);

}

Очистка свойств с файлами в товаре

$idProduct = 10339;

$propertyIDFile = 107;
$propertyIDMultiFile = 108;

$result = CRest::call(
	'crm.product.get',
	[
		'id' => $idProduct
	]
);

if (!empty($result['result']))
{
	$arProduct = $result['result'];
	$arPropsFile = [
		'PREVIEW_PICTURE',
		'DETAIL_PICTURE',
	];
	if ($propertyIDFile > 0)
	{
		$arPropsFile[] = 'PROPERTY_' . $propertyIDFile;
	}
	if ($propertyIDMultiFile > 0)
	{
		$arPropsFile[] = 'PROPERTY_' . $propertyIDMultiFile;
	}
	$arSaveData = [];
	foreach ($arPropsFile as $prop)
	{
		if (!empty($arProduct[$prop]['id']))//for standard fields PREVIEW_PICTURE and DETAIL_PICTURE
		{
			$arSaveData[$prop] = [
				'id' => $arProduct[$prop]['id'],
				'remove' => 'Y',
			];
		}
		elseif (!empty($arProduct[$prop]['value']['id']))//for property type file
		{
			$arSaveData[$prop] = [
				'valueId' => $arProduct[$prop]['valueId'],
				'value' => [
					'id' => $arProduct[$prop]['value']['id'],
					'remove' => 'Y',
				]
			];
		}
		elseif (!isset($arProduct[$prop]['value']) && is_array($arProduct[$prop]))//for property type multiple file
		{
			foreach ($arProduct[$prop] as $file)
			{
				if (!empty($file['value']['id']))
				{
					$arSaveData[$prop][] = [
						'valueId' => $file['valueId'],
						'value' => [
							'id' => $file['value']['id'],
							'remove' => 'Y',
						]
					];
				}

			}
		}
	}
}

$resultSave = CRest::call(
	'crm.product.update',
	[
		'id' => $idProduct,
		'fields' => $arSaveData
	]
);


© «Битрикс», 2001-2024, «1С-Битрикс», 2024