+7 495 008 8452 пн.-пт. 10:00 – 17:00
Загрузка...
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Тип свойства инфоблока "Простой чекбокс", упрощаем и сокращаем запросы

Сегодня выпущены обновления модуля Расширения инфоблоков, которые я подробно расписал в предыдущем посте. В текущем посте я рассмотрю новый тип свойства "Простой чекбокс". Что же это такое?

Как знают разработчики, даже для обычного чекбокса да/нет, надо создавать свойство типа "список". Какие у него минусы?
1. Доп.запрос при выборке. Маленький, но он есть. Это технические детали, не будем тут рассматривать.
2. Неудобство установки чекбокса в положение вкл. То есть, мы не можем так вот указать чекбоксу "ты теперь включен".
CIBlockElement::SetPropertyValueCode(38398, 'CHECK_STR', 'Y');
Нужно передавать именно ID варианта списка (!), то есть не ID св-ва даже, а ID варианта. Примерно так:
CIBlockElement::SetPropertyValueCode(38398, 'CHECK_STR', array(49));


scr5.png

Минусы очевидны и их достаточно. Поэтому, продвинутые разработчики использовали замену чекбоксу, заводя просто тип свойства "Строка", куда писали Y/N, подразумевая, что это и есть чекбокс.

scr1.jpg


Решение работоспособное, чего еще надо? Но неудобно же! Не объяснишь девочке-редактору, что Y это да, N это нет. Поверьте, это правда сложно им понять.

Решение - и есть новый тип свойства "простой чекбокс", которое базируется на строке, и сохраняет у себя значения Y/N (для чекбокса-строки) или 1/0 (для чекбокса-числа). Первое сделано лишь для совместимости со старыми версиями. Рекомендуется всегда выбирать чекбокс-число, как более быстрое для поиска.

scr0.png

И вот это свойство мы можем уже просто ставить в положение вкл.
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));//по числу

Естественно, поддерживается и фильтрация по нему:

scr7.png

Обращу ваше внимание. В базе для чекбокса-строки значение всегда хранится как Y/N, а для чекбокса-числа как 1/0 (сохранение и фильтр показаны выше). Менять это нельзя, можно менять только визуальное представление включенного и выключенного положения (в настройках конкретного свойства):

scr.png

Получаем в итоге:

scr2.png

Ну и последнее. Если у вас уже есть такое простое текстовое свойство с положениями Y/N (или числовое с 1/0), вы безбоязненно можете изменить у него тип свойства на "Простой чекбокс", все продолжит работать.

Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...