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