Сегодня выпущены обновления модуля Расширения инфоблоков, которые я подробно расписал в предыдущем посте. В текущем посте я рассмотрю новый тип свойства "Простой чекбокс". Что же это такое? [spoiler] Как знают разработчики, даже для обычного чекбокса да/нет, надо создавать свойство типа "список". Какие у него минусы? 1. Доп.запрос при выборке. Маленький, но он есть. Это технические детали, не будем тут рассматривать. 2. Неудобство установки чекбокса в положение вкл. То есть, мы не можем так вот указать чекбоксу "ты теперь включен".
Минусы очевидны и их достаточно. Поэтому, продвинутые разработчики использовали замену чекбоксу, заводя просто тип свойства "Строка", куда писали Y/N, подразумевая, что это и есть чекбокс.
Решение работоспособное, чего еще надо? Но неудобно же! Не объяснишь девочке-редактору, что Y это да, N это нет. Поверьте, это правда сложно им понять.
Решение - и есть новый тип свойства "простой чекбокс", которое базируется на строке, и сохраняет у себя значения Y/N (для чекбокса-строки) или 1/0 (для чекбокса-числа). Первое сделано лишь для совместимости со старыми версиями. Рекомендуется всегда выбирать чекбокс-число, как более быстрое для поиска.
И вот это свойство мы можем уже просто ставить в положение вкл.
CIBlockElement::SetPropertyValueCode(38398, 'CHECK_STR', 'Y');//для строки
CIBlockElement::SetPropertyValueCode(38398, 'CHECK_INT', 1);//для числа
или выкл.
CIBlockElement::SetPropertyValueCode(38398, 'CHECK_STR', 'N');//для строки
CIBlockElement::SetPropertyValueCode(38398, 'CHECK_INT', 0);//для числа
и очень просто без доп.запроса фильтровать по нему:
CIBlockElement::GetList(array(), array('=PROPERTY_CHECK_STR' => 'Y'));//по строке
CIBlockElement::GetList(array(), array('=PROPERTY_CHECK_INT' => 1));//по числу
Естественно, поддерживается и фильтрация по нему:
Обращу ваше внимание. В базе для чекбокса-строки значение всегда хранится как Y/N, а для чекбокса-числа как 1/0 (сохранение и фильтр показаны выше). Менять это нельзя, можно менять только визуальное представление включенного и выключенного положения (в настройках конкретного свойства):
Получаем в итоге:
Ну и последнее. Если у вас уже есть такое простое текстовое свойство с положениями Y/N (или числовое с 1/0), вы безбоязненно можете изменить у него тип свойства на "Простой чекбокс", все продолжит работать.
Не объяснишь девочке-редактору, что Y это да, N это нет. Поверьте, это правда сложно им понять.
Прям аж слезу пустил... почему нас не слушают разработчики?
p.s. я давно прошу сделать стандартную опцию автогенерации пароля у пользователя, забывают они его и постоянно, а выдумывать, а еще и по 5-10 вариантов (кол-во человек) - убивает...
Все так, только тип свойства выбран неправильно. Лучше все же на типе N его делать, чтобы в режиме ИБ+ использовался числовой тип столбца, а не text, тогда по нему без проблем можно будет индекс добавить
Сергей, спасибо, разумно. Будет два типа - "простой чекбокс", "простой чекбокс int" (как-то так). Первый нужен для поддержки проектов, где уже используется строка.
Реализовано предложение Сергея. Два типа свойств - строка и число. Кроме того реализована настройка принимаемых значений (кому-то нравится Y/N, кому-то yes/no, что угодно в общем).
В принципе Y/N логику можно сделать на типе "Список". Тип "Список", внешний вид "Значки", количество строк = 1 и добавить одно значение "Да". Проверять
Руслан, вы были невнимательны к посту. Как сделать из списка чекбокс мы все знаем. Вопрос в дополнительном запросе и неудобстве установке его через API.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».