Отправка сообщения






Свойства заказа в Bitrix D7

Если вам приходилось сталкиваться с Bitrix D7, то скорее всего вы уже заметили существенные изменения в работе с API. Поменялась концепция, и основные идеи в новом ядре. Операции работы с базой данных, выборка и сохранения стали однотипными, и одинаковыми параметрами, и фильтрами. Основная концепция ядра, которой придерживались при разработке, это ORM. Технология в программировании, которая ориентирована на связь базы данных с объектами, создавая тем самым некоторые сущности, с которыми работает разработчик.

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

Так для свойств заказа существуют объекты Bitrix\Sale\PropertyValue, которые были собраны в коллекции propertyCollection.

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

// используем пространство имён интернет-магазина
use Bitrix\Sale;

// int $orderId ID заказа
$order = Sale\Order::load($orderId);

// mixed $orderNumber номер заказа
$order = Sale\Order::loadByAccountNumber($orderNumber);

Далее получаем коллекцию свойств заказа:

$propertyCollection = $order->getPropertyCollection();

Переменная $propertyCollection содержит объект коллекции свойств, чтобы получить значение свойств и групп свойств в виде массива, обращается к следующим методам:

$arr = $propertyCollection->getArray(); // массив ['properties' => [..], 'groups' => [..] ];
$arr = $propertyCollection->getGroups(); // массив групп
$arr = $propertyCollection->getGroupProperties($groupId); // массив свойств, относящихся к группе

В системе Bitrix для заказов в системе существует целый набор стандартных свойств, значение которых можно получить следующими методами:

$emailPropValue = $propertyCollection->getUserEmail();
$namePropValue  = $propertyCollection->getPayerName();
$locPropValue   = $propertyCollection->getDeliveryLocation();
$taxLocPropValue = $propertyCollection->getTaxLocation();
$profNamePropVal = $propertyCollection->getProfileName();
$zipPropValue   = $propertyCollection->getDeliveryLocationZip();
$phonePropValue = $propertyCollection->getPhone();
$addrPropValue  = $propertyCollection->getAddress();

Назначение этих свойств думаю понятно из названия переменных и методов коллекции. Так же мы можем получить параметры свойства зная его ID, для этого есть специальный метод:

$somePropValue = $propertyCollection->getItemByOrderPropertyId($orderPropertyId);

В переменной $somePropValue будет находится объект-экземпляр класса Bitrix\Sale\PropertyValue, к которому можно обращаться для получения значений параметров свойства:

$somePropValue->getValue(); // значение свойства
$somePropValue->getViewHtml(); // форматированное значение (в читаемом виде)

Кроме самого значения свойства можно получать и другие параметры:

$arProp  = $somePropValue->getProperty(); // массив данных с параметрами свойства
$propId  = $somePropValue->getPropertyId(); // ID свойства
$propName = $somePropValue->getName(); // Название свойства
$isRequired = $somePropValue->isRequired(); // Обязательное ли свойство (true/false)
$propPerson = $somePropValue->getPersonTypeId(); // ID типа плательщика
$propGroup  = $somePropValue->getGroupId(); // ID группы

Методов для получения параметров свойств вполне достаточно. Используя объект свойства, вы можете так же вносить изменение в значение свойства для заказа. Для этих целей существует метод setValue(), к которому вы обращаетесь посредством объекта из переменной $somePropValue:

$somePropValue->setValue("value");
$order->save();
// $somePropValue->save() сохранит без пересчёта заказа

Как и любые изменения в заказе требуют его сохранения, для этих целей доступны два метода, первый метод save() доступный в объекте самого заказа, другой аналогичный метод доступный в объекте свойства заказа. Разница использования этих двух методов в том, что при сохранении всего заказа происходит перерасчёт заказа, а во втором случает сохраняется только свойство заказа, без пересчёта.

Опубликован: 21.04.2020 г.
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии

  • Загрузка...

Наверх