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

Значения свойств заказа

Внимание! Необходимо выполнять сохранение через заказ: \Bitrix\Sale\Order::save(). Помимо всего этого, в одной из ближайших версий вызов \Bitrix\Sale\PropertyValueCollection::save() либо \Bitrix\Sale\PropertyValue::save() будет генерировать ошибку уровня E_WARNING.

  • Получение значений свойств:
  • Получение конкретного значения свойства
  • Добавление нового свойства
  • Обновление значения свойства
  • Удаление значения свойства
  • Получение информации о свойстве, значение которого хранится в заказе:
  • Получение значений свойств:

    • Работа с объектами
      $collection = $order->getPropertyCollection();
      foreach ($collection as $item)
      {
      	// $item - объект класса \Bitrix\Sale\PropertyValue
      }
      
    • Работа с массивами

      Помимо объектов есть возможность напрямую обращаться к базе через метод \Bitrix\Sale\PropertyValueCollection::getList($parameters), либо \Bitrix\Sale\PropertyValue::getList($parameters). Оба этих метода работают аналогично.

      Методы всегда возвращают объект Bitrix\Main\DB\Result, из которого можно получить данные с помощью метода fetch().

      Параметр Описание С версии
      $parameters Массив, структура которого полностью соответствует структуре ORM'ного getList.
      // получение списка свойств для заказа с ID 123
      $dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
      	'select' => ['*'],
      	'filter' => [
      		'=ORDER_ID' => 123, 
      	]
      ]);
      
      while ($item = $dbRes->fetch())
      {
      	var_dump($item);
      }
      

    Получение конкретного значения свойства

    $collection = $order->getPropertyCollection();
    
    • по ID
      $propertyValue = $collection->getItemById($id);
      
    • по внутреннему индексу
      $propertyValue = $collection->getItemByIndex($index);
      
    • по ID самого свойства
      $propertyValue = $collection->getItemByOrderPropertyId($propertyId);
      
    • геттеры для значений ключевых свойств(телефон, email, имя, адрес и т.д.)
      $propertyValue = $collection->getAddress();
      $propertyValue = $collection->getPhone();
      $propertyValue = $collection->getProfileName();
      $propertyValue = $collection->getTaxLocation();
      $propertyValue = $collection->getDeliveryLocationZip();
      $propertyValue = $collection->getDeliveryLocation();
      $propertyValue = $collection->getPayerName();
      $propertyValue = $collection->getUserEmail();
      

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

    • Вариант 1:
      $propertyValue = $collection->createItem([
      	'ID' => 1,
      	'NAME' => 'Новое свойство',
      	'TYPE' => 'STRING',
      	'CODE' => 'NEW_PROP',
      ]);
      
      $propertyValue->setField('VALUE', 'Y');
      
    • Вариант 2:
      $propertyValue = \Bitrix\Sale\PropertyValue::create($collection, [
      	'ID' => 1,
      	'NAME' => 'Новое свойство',
      	'TYPE' => 'STRING',
      	'CODE' => 'NEW_PROP',
      ]);
      
      $propertyValue->setField('VALUE', 'Свойство_3');
      $collection->addItem($propertyValue);
      

    Обновление значения свойства

    $order = \Bitrix\Sale\Order::load(123);
    
    $collection = $order->getPropertyCollection();
    	
    $propertyValue = $collection->getItemById(123);
    $r = $propertyValue->setField('VALUE', 'Новое значение');
    if (!$r->isSuccess())
    {
    	var_dump($r->getErrorMessages());
    }
    	
    $order->save();
    

    Доступное для редактирования поле:

    "VALUE", // значение свойства
    

    Удаление значения свойства

    $order = \Bitrix\Sale\Order::load(123);
    
    $collection = $order->getPropertyCollection();
    
    $propertyValue = $collection->getItemById(123);
    $propertyValue->delete();
    
    $order->save();
    

    Получение информации о свойстве, значение которого хранится в заказе:

    • Работа с массивом
      $propertyInfo = $propertyValue->getProperty();
      

      Результатом является массив с ключами:

      'ID', // ID свойства
      'PERSON_TYPE_ID', // ID типа плательщика, к которому оно привязано
      'NAME', // Название свойства
      'TYPE', // Тип
      'REQUIRED', // Флаг обязательности
      'DEFAULT_VALUE', // Значение по умолчанию
      'SORT', // Сортировка
      'USER_PROPS', // Входит ли в профиль
      'IS_LOCATION', // Является ли местоположением
      'PROPS_GROUP_ID', // ID группы
      'DESCRIPTION',  // Описание
      'IS_EMAIL', // Является ли почтой
      'IS_PROFILE_NAME', // Является ли названием профиля пользователя
      'IS_PAYER', // Используется ли как имя плательщика 
      'IS_LOCATION4TAX', // Используется ли как местоположение для налогов
      'IS_FILTERED', // Доступно ли в фильтре по заказам
      'CODE', // Код
      'IS_ZIP', // Используется ли как почтовый индекс
      'IS_PHONE', // Является ли телефоном
      'IS_ADDRESS', // Является ли адресом
      'ACTIVE', // Флаг активности
      'UTIL', // Флаг служебности
      'INPUT_FIELD_LOCATION', 
      'MULTIPLE',// Флаг множественности
      'MINLENGTH', // Минимальная длина строки
      'MAXLENGTH', // Максимальная длина строки
      'PATTERN', // Регулярное выражение для проверки
      'MULTILINE', // Много строк
      'SIZE', // Количество видимых символов
      
    • Работа с объектом
      $property = $propertyValue->getPropertyObject();
      

      Любое значение можно получить, используя метод:

      $property->getField('SIZE');
      

      Для некоторых наиболее популярных полей реализованы геттеры:

      $property->getId(); // ID свойства
      $property->getPersonTypeId(); // ID типа плательщика, к которому оно привязано
      $property->isUtil(); // является ли служебным
      $property->isRequired(); // является ли обязательным
      $property->getType(); // тип 
      $property->getDescription(); // описание
      $property->getRelations(); // связи
      $property->getName(); // название
      $property->getGroupId(); // ID группы
      

    Пользовательские комментарии

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

    Для этого нужно всего лишь авторизоваться на сайте

    Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

    Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
    © «Битрикс», 2001-2019, «1С-Битрикс», 2019
    Наверх