Главная » API Битрикс » CIBlockElement » CIBlockElement::SetPropertyValues в Битрикс — установка значений свойств элемента

CIBlockElement::SetPropertyValues в Битрикс — установка значений свойств элемента

Метод CIBlockElement::SetPropertyValues() используется для записи и обновления значений свойств элементов инфоблоков в 1С-Битрикс. С его помощью можно изменять текстовые свойства, списки, файлы, привязки к элементам и разделам, а также множественные свойства.

Краткий ответ

Для изменения свойства элемента необходимо вызвать метод CIBlockElement::SetPropertyValues(), передав ID элемента, ID инфоблока и массив значений свойств.

<?php

CIBlockElement::SetPropertyValues(
    123,
    5,
    [
        "PRICE" => 15000
    ]
);

Описание функции

Метод записывает значения свойств элемента инфоблока. Если свойство уже содержит данные, они будут заменены новыми значениями.

В отличие от метода CIBlockElement::Update(), который предназначен для изменения основных полей элемента, SetPropertyValues() работает исключительно со свойствами инфоблока.

Метод позволяет обновлять как одно свойство, так и сразу несколько свойств за один вызов.

При использовании метода необходимо учитывать, что если передается неполный набор множественных значений, остальные значения могут быть удалены.

Нужна помощь с Битрикс?





    Синтаксис

    CIBlockElement::SetPropertyValues(
        int $ELEMENT_ID,
        int $IBLOCK_ID,
        mixed $PROPERTY_VALUES,
        string $PROPERTY_CODE = false
    );
    

    Параметры

    Параметр Тип Описание
    $ELEMENT_ID int ID элемента инфоблока.
    $IBLOCK_ID int ID инфоблока.
    $PROPERTY_VALUES mixed Значение свойства или массив свойств.
    $PROPERTY_CODE string|false Код конкретного свойства при обновлении одного значения.

    Пример использования

    Изменение одного свойства

    <?php
    
    CIBlockElement::SetPropertyValues(
        123,
        5,
        19990,
        "PRICE"
    );
    

    Изменение нескольких свойств

    <?php
    
    CIBlockElement::SetPropertyValues(
        123,
        5,
        [
            "PRICE" => 19990,
            "BRAND" => "Samsung",
            "IN_STOCK" => "Y"
        ]
    );
    

    Запись множественного свойства

    <?php
    
    CIBlockElement::SetPropertyValues(
        123,
        5,
        [
            "TAGS" => [
                "Битрикс",
                "PHP",
                "Разработка"
            ]
        ]
    );
    

    Обновление файлового свойства

    <?php
    
    CIBlockElement::SetPropertyValues(
        123,
        5,
        [
            "PHOTO" => CFile::MakeFileArray(
                $_SERVER["DOCUMENT_ROOT"]."/upload/photo.jpg"
            )
        ]
    );
    

    Установка привязки к элементу

    <?php
    
    CIBlockElement::SetPropertyValues(
        123,
        5,
        [
            "RELATED_PRODUCT" => 456
        ]
    );
    

    Типичные ошибки

    Указан неверный ID инфоблока

    CIBlockElement::SetPropertyValues(
        123,
        999,
        [
            "PRICE" => 1000
        ]
    );
    

    Если инфоблок указан неверно, свойства не будут сохранены.


    Использование неверного кода свойства

    [
        "PRICE_TEST" => 1000
    ]
    

    Код свойства должен точно совпадать с настройками инфоблока.


    Потеря значений множественного свойства

    [
        "TAGS" => [
            "Новое значение"
        ]
    ]
    

    При таком обновлении старые значения будут удалены и заменены новым массивом.


    Неправильная загрузка файлов

    [
        "PHOTO" => "/upload/image.jpg"
    ]
    

    Для файловых свойств необходимо использовать CFile::MakeFileArray().

    CIBlockElement::SetPropertyValuesEx

    В современных проектах чаще используется метод CIBlockElement::SetPropertyValuesEx().

    Он работает быстрее, обновляет только указанные свойства и не затрагивает остальные значения.

    <?php
    
    CIBlockElement::SetPropertyValuesEx(
        123,
        5,
        [
            "PRICE" => 19990
        ]
    );
    

    Для большинства новых разработок рекомендуется использовать именно SetPropertyValuesEx.

    Аналог на D7

    В ORM D7 свойства можно обновлять через сгенерированные классы инфоблоков.

    <?php
    
    use Bitrix\Iblock\Elements\ElementCatalogTable;
    
    $result = ElementCatalogTable::update(
        123,
        [
            "PRICE" => 19990,
            "BRAND" => "Samsung"
        ]
    );
    
    if (!$result->isSuccess()) {
        print_r(
            $result->getErrorMessages()
        );
    }
    

    Конкретная реализация зависит от структуры инфоблока и настроек ORM-классов.

    FAQ

    Что делает CIBlockElement::SetPropertyValues?

    Метод записывает значения свойств элемента инфоблока.

    Чем отличается SetPropertyValues от Update?

    Update изменяет поля элемента, а SetPropertyValues работает только со свойствами инфоблока.

    Можно ли обновить одно свойство?

    Да, через параметр $PROPERTY_CODE.

    CIBlockElement::SetPropertyValues(
        123,
        5,
        1000,
        "PRICE"
    );
    

    Что лучше использовать — SetPropertyValues или SetPropertyValuesEx?

    Для новых проектов рекомендуется SetPropertyValuesEx, так как метод быстрее и безопаснее обновляет отдельные свойства.

    Можно ли записывать файлы?

    Да, через CFile::MakeFileArray().

    Можно ли обновить несколько свойств одновременно?

    Да, достаточно передать массив свойств и значений в третьем параметре метода.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний