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

Свойства корзины

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


Добавление

// $basket - объект класса \Bitrix\Sale\Basket
foreach ($basket as $basketItem)
{
	$collection = $basketItem->getPropertyCollection();

	$item = $collection->createItem();
	$item->setFields([
		'NAME' => 'Новое свойство',
		'CODE' => 'XXX',
		'VALUE' => 'Значение',
	]);
}
	

Получение

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

    Помимо объектов есть возможность напрямую обращаться к базе через метод \Bitrix\Sale\BasketPropertiesCollection::getList($parameters).

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

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

Обновление

// $basketItem - объект класса \Bitrix\Sale\BasketItem
$collection = $basketItem->getPropertyCollection();
$property = $collection->getItemById(123);
$property->setField('VALUE', 'Новое значение');

'NAME', // название свойства
'VALUE', // значение свойства
'CODE', // код свойства
'SORT', // сортировка
'XML_ID' // внешний код

Удаление

// $basketItem - объект класса \Bitrix\Sale\Basket
$collection = $basketItem->getPropertyCollection();
$property = $collection->getItemById(123);
$property->delete();

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

$collection = $baketItem->getPropertyCollection();
  • по ID
    $property = $collection->getItemById($id);
    
  • по внутреннему индексу
    $property = $collection->getItemByIndex($index);
    

Перезапись всех имеющихся свойств

Метод \Bitrix\Sale\BasketPropertiesCollection::redefine работает следующим образом:

  • если свойство есть в коллекции, но отсутствует во входных данных, то свойство будет удалено
  • если свойство есть в коллекции, а так же присутствует во входных данных, то свойство обновится
  • если свойства нет в коллекции, но присутствует во входных данных, то свойство добавится
// $basket - объект класса \Bitrix\Sale\BasketBase
foreach ($basket as $basketItem)
{
	$collection = $basketItem->getPropertyCollection();
	$collection->redefine([
		[
			'NAME' => 'Новое свойство',
			'CODE' => 'XXX',
			'VALUE' => 'Значение',
		]
	]);
}



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

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

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

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

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