Как в bitrix установить свойство типа список(enum) у инфоблока методами api?

Интернет магазин на битрикс. Есть товары и торговые предложения.
У инфоблока торговых предложений создано свойство "Размер" код "SIZE". Данное свойство является списком(не множественное).
Как методами API поменять значение свойства(или установить если ещё не установлено)?
Отдельно подвопрос:
Допустим у меня уже созданы элементы списка свойства SIZE, например 4 следующих: "100*100","100*150","150*150","150*200"
И предположим мне нужно у элемента инфоблока торговых предложений, предположим с кодом 100 установить значение свойства SIZE "300*400" которого ещё нет в списке. Как оптимальнее это делать?
  • Вопрос задан
  • 8387 просмотров
Решения вопроса 1
nikolaevevge
@nikolaevevge Автор вопроса
В результате написал функцию которая принимает 3 параметра: 1) значение которое должно быть у списочного свойства, 2) Ид инфоблока, 3) код свойства - функция возвращает Ид существующего свойства, а если не найдёт - создает запись в свойстве и возвращает её Ид. При ошибке возвращается false

Код функции и примеры использования тут blog.ivru.net/?id=175

Непосредственно по заданному вопросу, создание товаров или торговых предложений с привязкой свойства типа список(enum) осуществляется следующим образом:

$el = new CIBlockElement;

$arLoadProductArray = array(
  "IBLOCK_ID"=>2, // IBLOCK торговых предложений
  "NAME"=>"Имя торгового предложения",
  "ACTIVE"=>"Y",
  "PROPERTY_VALUES"=>array(
    "CML2_LINK"=>$PRODUCT_ID, // Свойство типа "Привязка к товарам (SKU)", связываем торг. предложение с товаром
    "CML2_ARTICLE"=>"Артикул торгового предложения",
    "SIZE"=>$sizePropId,
    "CLOTH"=>$clothPropId
  )
);

$product_offer_id = $el->Add($arLoadProductArray);


В коде выше у меня свойства SIZE и CLOTH типа список(enum) в переменных $sizePropId и $clothPropId передаются идентификаторы необходимых значений свойств.

Для получения идентификатора по значению, я привёл ссылку на соответствующую функцию.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
alexyarik
@alexyarik
Битрикс разработчик
1) Обновить списочное свойство
CIBlockPropertyEnum::GetList - получаете ID значения свойства списка
CIBlockElement::SetPropertyValues - обновляете свойство элемента используя ID значения свойства списка
2) Добавить списочное свойство
Если ID значения свойства списка пустое, тогда:
$ibpenum = new CIBlockPropertyEnum;
if($PropID = $ibpenum->Add() 
{CIBlockElement::SetPropertyValues

Тут подробнее https://dev.1c-bitrix.ru/api_help/iblock/classes/c...
Ответ написан
Комментировать
ioxio
@ioxio
Web-developer
bitrix установить (запись) свойство типа список(enum) у инфоблока методами api D7 ORM

Для того, чтобы начать использовать эту возможность вам необходимо зайти в настройки информационного блока и задать значения для поля «Символьный код API».

Для свойств типа строка: / множественный / привязка к элементу

RATING_LIKE - Свойство в инфоблоке
аналогично пишем всегда $element->getRatingLike() в "CamelCased" - код свойства

\Bitrix\Main\Loader::includeModule('iblock');

$iblock = \Bitrix\Iblock\Iblock::wakeUp(IB_ARTICLE);  // IB_ARTICLE - Ваш инфобло

$classArticleName = $iblock->getEntityDataClass();

$element = $classArticleName::getByPrimary( $ELEMENT_ID , array( // $ELEMENT_ID - id елемента
    'select' => array('ID', 'NAME', 'RATING_LIKE')
))->fetchObject();

// Запись Тип Строка
$element->getRatingLike()->setValue('new value');
$element->getRatingLike()->setDescription('new descr');

// ========== Запись/Множественный  (тип Спиок) ============
use Bitrix\Iblock\ORM\PropertyValue;

foreach ($element->getRatingLike() as $value)
{
    $value->setValue('new value');
    $value->setDescription('new descr');
}

$element->addToRatingLike(new PropertyValue('new value'));
$element->addToRatingFile(new PropertyValue('new value', 'new descr'));

// ===========================================

// установка привязки к элементу
$element->getRatingLike()->setElement($anotherElement);

// Сохраняем
$element->save();


ЕСЛИ ошибка типа «Call to a member function on null» - Проверьте наличие свойства в Инфоблоке и его Имя.
(Возможно - не видит "новосозданное свойство", странно, конечно, но мне помогло элементарное пересохранение их админки элементов...)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы