Внимание! Удалять и обновлять несколько значений файлового свойства можно только одним вызовом, а не несколькими, так как меняются ID значений свойств. Например:
|
---|
Подразумевается, что необходимо собрать для 1 свойства типа файл все удаляемые значения (PROPERTY_VALUE_ID каждого файла) в массив. Затем производить удаление.
<?php $obElement = \CIBlockElement::GetList( [], [ 'ID' => (int)$aElementID, 'IBLOCK_ID' => (int)$iMainIblockId ], false, false, [ 'ID', 'IBLOCK_ID', ] ); if ($obFields = $obElement->GetNextElement()) { $arProperties = $obFields->GetProperties(); if (!empty($arProperties)) { /** * Собираем файлы для удаления в массив, * группируя по свойствам */ foreach ($arProperties as $sPropCode => $arPropValues) { /** * $sPropCode - ключ код свойства, в котором мы ищем удаляемый файл без PROPERTY_ и _VALUE, например PHOTO * $arPropValues - PROPERTY_VALUE_ID удаляемого файла * $arFiles["FILE_DELETE"] - массив, содержащий ID удаляемых файлов всех свойств * $sValue - искомое значение ID */ foreach ($arPropValues['VALUE'] as $iKeyValue => $sValue) { if (in_array($sValue, $arFiles["FILE_DELETE"]) && $arPropValues['PROPERTY_VALUE_ID'][$iKeyValue] > 0) { $arDeleteList[$sPropCode][$arPropValues['PROPERTY_VALUE_ID'][$iKeyValue]] = [ ' VALUE' => [ 'del' => 'Y', ] ]; } } } /** * Если массив для удаления файлов не пустой * производим удаление */ if (!empty($arDeleteList)) { foreach ($arDeleteList as $sPropForDelete => $arDeleteFiles) { CIBlockElement::SetPropertyValueCode( $aElementID, $sPropForDelete, $arDeleteFiles ); } } } } |
SetPropertyValues
Описание
CIBlockElement::SetPropertyValues( int ELEMENT_ID, int IBLOCK_ID, array PROPERTY_VALUES, string PROPERTY_CODE = false );
Метод сохраняет значения всех свойств элемента информационного блока. Статический метод.
Смотрите также
Параметры вызова
Параметр | Описание |
---|---|
ELEMENT_ID | Код элемента, значения свойств которого необходимо установить. |
IBLOCK_ID | Код информационного блока. |
PROPERTY_VALUES | Массив значений свойств, в котором коду свойства ставится в соответствие значение свойства.
Если PROPERTY_CODE установлен, то должен содержать одно или массив всех значений свойства (множественное) для заданного элемента. Если PROPERTY_CODE равен false, то PROPERTY_VALUES должен быть вида Array("код свойства1"=>"значения свойства1", ....), где "код свойства" - числовой или символьный код свойства, "значения свойства" - одно или массив всех значений свойства (множественное). При этом массив PROPERTY_VALUES должен содержать полный набор значений свойств для данного элемента, т.е. если в нем будет остутствовать одно из свойств, то все его значения для данного элемента будут удалены. Это справедливо для всех типов свойств кроме типа файл. Файлы надо удалять через массив с параметром "del"=>"Y". Если свойство типа файл множественное, то файл будет удален в случае присутствия параметра del, независимо от принимаемого им значения. Примечания:
|
PROPERTY_CODE | Код изменяемого свойства. Если этот параметр отличен от false, то изменяется только свойство с таким кодом. Не обязательный параметр, по умолчанию равен false. |
Примеры использования
Пример 1:
<? $ELEMENT_ID = 18; // код элемента $PROPERTY_CODE = "PROP1"; // код свойства $PROPERTY_VALUE = "Синий"; // значение свойства // Установим новое значение для данного свойства данного элемента $dbr = CIBlockElement::GetList(array(), array("=ID"=>$ELEMENT_ID), false, false, array("ID", "IBLOCK_ID")); if ($dbr_arr = $dbr->Fetch()) { $IBLOCK_ID = $dbr_arr["IBLOCK_ID"]; CIBlockElement::SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUE, $PROPERTY_CODE); } ?>
Пример 2 (код вызова метода для свойства типа "Строка"):
$value="text"; CIBlockElement::SetPropertyValueCode("$ELEMENT_ID", "code", $value);
Пример 3 (код вызова метода для свойства типа "HTML/text"):
$value="text"; CIBlockElement::SetPropertyValueCode("$ELEMENT_ID", "code", array("VALUE"=>array("TEXT"=>$value, "TYPE"=>"html")));
Пример 4 (добавление описания к значению):
CIBlockElement::SetPropertyValues ( $PRODUCT_ID, $IBLOCK_ID, array("VALUE"=>$prop_value,"DESCRIPTION"=>$prop_description), $property_name );
Пример 5 (удаление свойства типа "Файл"):
CIBlockElement::SetPropertyValuesEx(ELEMENT_ID, IBLOCK_ID, array(PROPERTY_ID => Array ("VALUE" => array("del" => "Y"))));
Пример 6:
Если требуется обновить всю карточку товара, включая свойства со значениями множественного типа (вместе с их описанием), то это можно сделать одним вызовом Update. Следует добавить описание (DESCRIPTION) к значениям (VALUE) свойств множественного типа, в PROPERTY_VALUES прописать числовой или символьный код свойства (множественного типа) и присвоить массив со значениями типа:
$arrFields = Array( 'PROPERTY_ID_OR_CODE' => Array( Array( "VALUE" => 'value1', "DESCRIPTION" => 'desc for value1' ), Array( "VALUE" => 'value2', "DESCRIPTION" => 'desc for value2' ) ) );
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.