14 июл 2020
4363
Рассмотрим пример:
цена на товар храниться в свойстве элемента инфоблока - пусть код свойства с ценой PRICE.
Задача:
Установить цены на товары в соответствии с ценой содержащийся в свойстве элемента.
Для начала нужно выбрать все элементы инфоблока и значение свойства PRICE и составим из них массив $arPrice, индексами массива будут ID элементов а значениями массива - значения свойства PRICE. Если свойство PRICE не числовое, то такой элемент добавлять в массив не будем.
IBLOCK_ID - содержит ID инфоблока в котором хранятся элементы, над которыми будем производить все действия. Для выбора свойства указываем в массиве $arSelectFields - PROPERTY_PRICE.
$rsElement = CIBlockElement::GetList(
$arOrder = array("SORT" => "ASC"),
$arFilter = array(
"IBLOCK_ID" => 1,
),
false,
false,
$arSelectFields = array("ID", "NAME", "IBLOCK_ID", "CODE", "PROPERTY_PRICE")
);
while($arElement = $rsElement->fetch()):
if (is_numeric($arElement['PROPERTY_PRICE_VALUE'])){
$arPrice[$arElement['ID']] = array(
'ID' => $arElement['ID'],
'PRICE' => $arElement['PROPERTY_PRICE_VALUE']
);
}
endwhile;
Чтобы элемент стал Товаром достаточно для элемента добавить параметры товара при помощи метода CCatalogProduct::Add. После этого можно уже добавлять цену если она она отсутствует или обновить если она уже установлена используя методы CPrice::Add/CPrice::Update. Теперь необходимо пройтись по всему массиву и установиться для каждого элемента.
CATALOG_GROUP_ID - содержит ID цены. ID цены можно посмотреть в админке - Магазин -> Настройки -> Цены -> Типы цен (в таблице столбец ID ).
foreach($arPrice as $id=>$price):
$arFields = Array(
"PRODUCT_ID" => $key,
"CATALOG_GROUP_ID" => 1,
"PRICE" => (int)$price,
"CURRENCY" => "RUB",
"QUANTITY_FROM" => false,
"QUANTITY_TO" => false
);
// Добавляем для элемента параметры товара
CCatalogProduct::Add(
array(
"ID" => $key,
"QUANTITY" => 9999
)
);
//Получаем цены товара ( в том случаи если уже есть цена у товара ), если нет, тогда добавляем сразу цену.
$res = CPrice::GetList(
array(),
array(
"PRODUCT_ID" => $key,
"CATALOG_GROUP_ID" => 1
)
);
if ($arr = $res->Fetch())
{
echo "Цена успешно обновлена ".CPrice::Update($arr["ID"], $arFields).PHP_EOL;
}
else
{
echo "Цена успешно добавлена ".CPrice::Add($arFields).PHP_EOL;
}
endforeach;