Как в Битриксе можно скрыть товарное предложение?

Как настроить обработчик, чтобы деактивировать товарные предложения (ТП) с нулевым количеством или ценами?
  • 2 июля 2024 г. 18:42
Ответы на вопрос 2
Для скрытия товарного предложения в Битриксе можно использовать фильтры или настройки доступности товара. Вот несколько способов:

1. Через административную панель:
- Зайдите в раздел "Торговый каталог" -> "Товары" и выберите нужный товар.
- В разделе "Торговые предложения" найдите нужное предложение и установите его статус на "недоступен" или "скрыт".

2. Через API:
- Воспользуйтесь методом CIBlockElement::Update для изменения свойств товарного предложения. Установите свойство "ACTIVE" в значение "N" для скрытия товарного предложения.

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

```php
// Получаем все активные товарные предложения
$arFilter = Array("IBLOCK_ID"=>5, "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, array("ID", "IBLOCK_ID"));

while($ob = $res->GetNextElement()){
    $arFields = $ob->GetFields();
    
    // Получаем количество и цену товарного предложения
    $quantity = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], array(), array("CODE" => "QUANTITY"))->Fetch();
    $price = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], array(), array("CODE" => "PRICE"))->Fetch();
    
    // Если количество или цена равны нулю, деактивируем товарное предложение
    if($quantity["VALUE"] == 0 || $price["VALUE"] == 0){
        $el = new CIBlockElement;
        $arFields = Array(
            "ACTIVE" => "N"
        );
        $el->Update($arFields["ID"], $arFields);
    }
}
```

Замените значение "IBLOCK_ID"=>5 на ID вашего инфоблока и запустите этот код в обработчике, который будет вызываться при определенных событиях (например, при обновлении товара).
Активность относится к элементу инфоблока, а не к каталогу, а вы только пытаетесь через каталог ProductTable её убрать. 

Вот какие нужно задействовать таблицы:
названия, активности - элемент, CIBlockElement
Количство - каталог, CCatalogProduct
цена - прайс, CPrice

под D7, сами поменяете таблицы на правильные, я только указал в чем принципиальная ошибка
Похожие вопросы