Свободный вечер пятницы и жажда креатива заставили меня сделать дополнительное пользовательское свойство для инфоблоков – чекбокс.
Традиционно, хардкорные программисты реализуют функционал чекбокса с помощью строки, где хранится значение Y/N, или с помощью числа 0/1. Интеграторы со стажем используют свойство список с единственным элементом.
Первый подход мне не нравится, потому что он не юзер-ориентирован, а второй мне кажется слишком тяжеловесным. А еще хотелось бы работать с этим свойством как с полем "ACTIVE". Поэтому я решил сделать своё свойство с... ну вы знаете с чем [spoiler] Следующий код надо положить в какой-нибудь файл и заинклюдить его в init.php. Всё остальное он сделает сам.
По сути моё свойство – это обёртка над строкой, в базе оно сохраняется как "Y" и "N". Соответственно, для фильтрации через API надо использовать эти значения. Кроме того, везде, где можно, любые значения отличные от "Y" считаются за "N".
Если разрешить поиск по этому свойству, то в индекс попадёт название свойства, а не значение. Ну действительно, зачем кому-то искать по букве "Y" ? Так что, если мы назовём свойство «горячее предложение», то в поиске по этой фразе найдутся все элементы, у которых установлен соответствующий флажок.
Проблемы
Фильтр в публичной части выглядит, как текстовый инпут. В штатных свойствах «Дата/Время» и «Счетчик» можно подглядеть метод GetPublicFilterHTML, который, по-видимому, должен отвечать за внешний вид фильтров в публичке, однако Битрикс его нигде не использует, а жаль.
Мне не захотелось оборачивать одно единственное свойство в модуль, потому что я не сторонник теории 1001 мелкого модуля. По этой причине свойство не удастся использовать на сайте с несколькими языками (хотя все языковые фразы я вынес в отдельный массив). Если кто-то задумает собрать модуль с пользовательскими свойствами, то я буду только рад, если моё творенье окажется там
В смысле мучиться? Если поле "список" с одним значением, то в фильтре все просто. "!PROPERTY_YOURCODE"=>false (если надо выбрать отмеченные) "PROPERTY_YOURCODE"=>false (если надо выбрать не отмеченные)
API не даст сохранить незаполненное значение. При любых манипуляциях со свойством вызывается метод ConvertToDB, он приведёт всё возможные значения либо к "Y" либо к "N", третьего варианта не будет.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».