$arFilter = array("PROPERTY_CML2_SCAN_CODE"=>"" ) - используется, чтобы выбрать все элементы; $arFilter = array("!PROPERTY_CML2_SCAN_CODE"=>"" ) - используется, чтобы выбрать все элементы;
Вроде бы противоположные фильтры (во втором - '!'), а комментарии - одинаковые. Так и должно быть?
Контент-менеджер Таблица элементов Примечание: В некоторых формах с помощью кнопки Настроить можно осуществить импорт данных таблцы в файл формата Excel.
$arFilter = array("!PROPERTY_CML2_SCAN_CODE"=>false ) - используется, чтобы выбрать только элементы с заполненным свойством; $arFilter = array("!PROPERTY_CML2_SCAN_CODE"=>false ) - используется, чтобы выбрать все элементы;
Выражения слева от '-' равны, а справа - нет. Это - Пятницо :) ))
На странице хорошо бы добавить ссылки на основные функции, в которых можно использовать такую фильтрацию. Например, на , , и т.п. Хотя бы на одну из них (например, ) ссылка нужна обязательно. Потому, что там описано, для каких полей какой тип фильтрации используется.
Также стоит добавить в курс ссылки на страницы API, описывающие типы фильтров:
или ссылку на весь раздел
предварительно добавив в него несколько слов о том, что это, где используется, чем различаются типы фильтров "строка" и "маска" (заострить внимание на ссылки в описаниях параметра arFilter), а также то, что для некоторых полей реализован упрощенный тип фильтрации, в котором можно использовать только символ отрицания '!'.
Кстати, эти страницы типов фильтров (и ссылки на них) лучше переименовать в 'Фильтр "Число"', 'Фильтр "Строка"', 'Фильтр "Маска"' и 'Фильтр "Дата"', чтобы не путаться с обычными типами данных. Сейчас, например, запись 'ID - по числовому коду ();' в описании функции , на мой взгляд, мало информативна. Ведь то, что ID - это число, я уже знаю, и совсем не предполагаю, что по предложенной ссылке есть дополнительная полезная информация. А если будет написано 'ID - по числовому коду ();', то я сразу стану внимательнее относиться к таким ссылкам. Ведь, в частности, именно они указывают разницу, когда применяется тип фильтрации "Строка", а когда - "Маска".
Дополнительно задам еще пару вопросов:
1. Работают ли типы фильтрации в функциях, в описании которых это явно не описано, например, в или в ? (Это я к тому, что вдруг они работают, а в описании таких функций об этом просто забыли написать.)
(Еще опечатка: на дважды указано поле ID в описании параметра arFilter).
2. Правильно ли я понимаю, что для значений пользовательских свойств типа DateTime ни в одной функции не используется фильтр "Дата", а вместо него применяется только поиск по шаблону [%_] ?
P.S.: Подсказка по предыдущему посту - строку
$arFilter = array("!PROPERTY_CML2_SCAN_CODE"=>false ) - используется, чтобы выбрать все элементы;
нужно было просто удалить со страницы ;) Кстати, этот злосчастный пример остался еще и в API - на странице описания функции .
--- Добавлено:
И еще по фильтрации:
В документации классов модулей "Интернет-магазин" и "Торговый каталог" (например, ) типы фильтрации '!' и '+' названы "модификаторами", а остальные ('>=', '>', '<=', '<', '~', '@', '%') - "операторами". Может имеет смысл использовать такую же нотацию и на ?
Наверное, стоит упомянуть в курсе операторы '~', '@' и модификатор '+'. Интересно, они специфичны для этих двух модулей, или встроены в ядро? (Например, для оператор '~' отсутствует в описании параметра arFilter, но работает, как указано в примере и комментарии.)
Интересно также знать, работает ли оператор '?' для классов модулей "Интернет-магазин" и "Торговый каталог"? (В API на эти модули он не упомянут.)
А также, отличается ли логика работы оператора '%' в модулях "Интернет-магазин" и "Торговый каталог" от прочих? Ведь в документации на эти модули указано, что для этого оператора "значение поля проверяется на соответствие передаваемой в фильтр строке в соответствии с языком запросов" (я так понимаю в SQL текущей базы данных?), в то время как в общем описании инфоблоков - действие зависит от типа значения (для чисел и дат - проверка на точное совпадение значения, для строк и масок - это регистронезависимый поиск подстроки).