Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Тип свойства инфоблока "Простой чекбокс", упрощаем и сокращаем запросы
Сегодня выпущены обновления модуля Расширения инфоблоков, которые я подробно расписал в предыдущем посте. В текущем посте я рассмотрю новый тип свойства "Простой чекбокс". Что же это такое? Как знают разработчики, даже для обычного чекбокса да/нет, надо создавать свойство типа "список". Какие у него минусы? 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), вы безбоязненно можете изменить у него тип свойства на "Простой чекбокс", все продолжит работать.