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

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

Описание

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

Для работы примеров необходимо создать папку /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