Как убрать значение акции в свойстве товара

121
07 января 2021, 10:40

Есть товары в админке битрикса с просроченной акцией. То есть у каждого товара есть свойство EVENTS.

По скрину видно что свойство может быть как и одно так и несколько.

Я решил сделать так:

  1. Выбрать сначала все акции срок которых истек и получить их ID. За это отвечает следующий код:
    $arOrder      = array();
    $arFilter     = array(
        "IBLOCK_ID"    => 22,
        "!ACTIVE_DATE" => "Y",
    );
    $res          = CIBlockElement::GetList(array(), $arFilter, false);
    $allOutAction = array();
    while ($ob = $res->GetNextElement()) {
        $arFields[] = $ob->GetFields();
        $arrID = array_column($arFields, 'ID');
    };
  1. Далее я получаю список всех акционных товаров, делаю я это так:
    $arFilter2 = array(
        "IBLOCK_ID"        => "2",
        "!PROPERTY_EVENTS" => false,
    );
    $all_res   = CIBlockElement::GetList(
        array(
        ),
        $arFilter2,
        false,
        false,
        array(
            'ID',
            'PROPERTY_EVENTS'
        )
    );
    while ($ob2 = $all_res->GetNextElement()) {
        $arFields2[] = $ob2->GetFields();
    };
    //echo('
');
    //print_r($arFields2);
    //echo('
'); foreach ($arFields2 as $prod) { $prodEventsId = ($prod["PROPERTY_EVENTS_VALUE"]); foreach($prodEventsId as $EventsId) { if ($arrID = $EventsId) { $prod["PROPERTY_EVENTS_VALUE"] = array(); $prod["~PROPERTY_EVENTS_VALUE"] = array(); $prod["PROPERTY_EVENTS_PROPERTY_VALUE_ID"] = array(); $prod["~PROPERTY_EVENTS_PROPERTY_VALUE_ID"] = array(); } }

при этом я получаю на выходе массив с товарами (для примера приведу один товар) - где подмассив с акциями - пустой. Вот сам подмассив:

[PROPERTY_EVENTS_VALUE] => Array
        (
        )

и соответсвенно полностью вывод товара:

Array
(
    [ID] => 2956
    [~ID] => 2956
    [PROPERTY_EVENTS_VALUE] => Array
        (
        )
    [~PROPERTY_EVENTS_VALUE] => Array
        (
        )
    [PROPERTY_EVENTS_DESCRIPTION] => Array
        (
            [0] => 
        )
    [~PROPERTY_EVENTS_DESCRIPTION] => Array
        (
            [0] => 
        )
    [PROPERTY_EVENTS_PROPERTY_VALUE_ID] => Array
        (
        )
    [~PROPERTY_EVENTS_PROPERTY_VALUE_ID] => Array
        (
        )
)

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

Вот скрин с админки:

фасеты перестроил - не помогло.

Answer 1

Для поля типа список попробуйте в фильтре указать вот так:

$arFilter2 = array(
    "IBLOCK_ID"        => "2",
    "!PROPERTY_EVENTS_VALUE" => false,
);

в документации по GetList в разделе фильтр об этом говорится

READ ALSO
file_get_contents не работает в цикле

file_get_contents не работает в цикле

Пишу так скажем парсер, но не работает file_get_contents в цикле

142
Работа с данными и проверка данных массива

Работа с данными и проверка данных массива

У меня есть массив данных который приходит с POST, а имеено

85
Способы оптимизации sql-запроса

Способы оптимизации sql-запроса

Один запрос выборки статистики занимает достаточно много времени, да и сам запрос достаточно сложныйМного внутренних запросов и подсчеты...

117
Очищает ли JVM стек вызовов после StackOverflowError?

Очищает ли JVM стек вызовов после StackOverflowError?

Пусть N это N-ое число Фибоначчи, при вычислении которого возникает переполнение стека вызовов, а K это K-ое число Фибоначчи, которое будет вычислено...

96