Реализовать фильтрацию товарных предложений в методе CIBlockPriceTools::GetOffersArray

Рейтинг: 1.2180  
На голосовании
Предложил Пользователь 180107 05.09.2014 10:42:14

Реализовать фильтрацию товарных предложений в методе CIBlockPriceTools::GetOffersArray

Часто встречаюсь с задачей, когда необходимо отфильтровать не только товары по свойствам их товарных предложений, но и фильтровать сами предложения и выводить для товара только те, которые удовлетворяют фильтру. Я решил этот вопрос переопределением(через extends, а не модификаций ядра) метода GetOffersArray системного класса CIBlockPriceTools.
[spoiler]
      ... 
      if (!empty($arFilter) && is_array($arFilter))
            {
                if (isset($arFilter['IBLOCK_ID']))
                    $IBLOCK_ID = $arFilter['IBLOCK_ID'];
                if (isset($arFilter['HIDE_NOT_AVAILABLE']))
                    $boolHideNotAvailable = 'Y' === $arFilter['HIDE_NOT_AVAILABLE'];
                if (isset($arFilter['CHECK_PERMISSIONS']))
                    $boolCheckPermissions = 'Y' === $arFilter['CHECK_PERMISSIONS'];
            }
            else
            {
                $IBLOCK_ID = $arFilter;
            }
       
      //новые строки
            unset($arFilter['IBLOCK_ID']); unset($arFilter['HIDE_NOT_AVAILABLE']); unset($arFilter['CHECK_PERMISSIONS']); $arrFilter = $arFilter; 
      //конец новых строк    
      
            $arOffersIBlock = CIBlockPriceTools::GetOffersIBlock($IBLOCK_ID);
            if($arOffersIBlock)
            { 
      ...  
          ... 
      //в GetList делаем merge.  
        $rsOffers = CIBlockElement::GetList($arOrder, array_merge($arFilter,$arrFilter), false, false, array_keys($arSelect));
      ...