Всем доброго времени суток. Начну с того что я импортировал каталог 1С в Битрикс:
После импорта в моем инфоблоке у меня создалось несколько свойств, в том числе свойство Характеристики.
Это свойство имеет тип строка но как по факту выяснилось в действительности оно содержит набор строк:
В документации метода CIBlockElement::GetList приведена информация что фильтр по свойствам элементов делается следующим образом: При помощи массива правило=>значение array(PROPERTY_<PROPERTY_CODE> => значениеСвойства)
Так как же мне сделать фильтр по свойству Характеристики если оно содержит не значение а набор значений ?
Примечание 1: если в массиве используются свойство, являющееся множественным, то для элементов, где используются несколько значений этого свойства, будет возвращено несколько записей вместо одной. Для решения этой проблемы инфоблоки нужно перевести в Режим хранения свойств в отдельных таблицах, в этом случае для свойства будет отдаваться массив значений. Либо можно не указывать свойства в параметрах выборки, а получать их значения на каждом шаге перебора выборки с помощью _CIBElement::GetProperties().
Получать свойства на каждом этапе выборки свойств элемента при помощи CIBElement::GetProperties() это понятно но тогда получится фильтрация на уровне php что достаточно медленно.
В режиме Режим хранения свойств в отдельных таблицах можно получить множественное свойство в виде массива, это уже здорово но как по такому массиву указать правило для фильтра array(PROPERTY_<PROPERTY_CODE> => значениеСвойства) при выборе функцией CIBlockElement::GetList ?
Я вообще не совсем понимаю почему для свойства с типом Строка в значении используется Набор Строк и все называют это множественным значением при том что это уже не соответствует типу свойства и не укладывается в существующий API. Я так понимаю, мне придется фильтровать все это на уровне php после GetProperties да ?! Это плохо.
Я бы потратил время и привязался бы к таблицам БД но боюсь это решение не проживет и пары апдейтов.