Фильтрация bitrix.catalog.section по свойству типа «Дата»

В рамках данной небольшой заметки решается вопрос о фильтрации элементов инфоблока по свойству типа «Дата» в компоненте bitrix.catalog.section. 

В некоторых ситуациях может возникнуть необходимость отфильтровать содержимое каталога по свойству типа «Дата». Например, это может быть полезно в случае, если нужно вывести «Новинки» товара, а свойство «Новинки» как раз и заведено в соответствующем типе.

В самом деле, процесс довольно прост и, большей частью, решается штатными средствами битрикса. Однако, неподготовленный пользователь может столкнуться с определенными трудностями при попытке установки такой фильтрации. Собственно, ниже, в 2 шага и решается данный момент.

Шаг первый. Фильтрация элементов инфоблока средствами Битрикс. 

Предположим, что свойство уже создано, а компонент bitrix.catalog.section выведен на странице. Следовательно, далее, в публичной части сайта следует перейти в режим редактирования. Шестеренкой вызвать «Редактирование параметров компонента».

Далее, в открывшемся окне, следует перейти к пункту «источник данных» и установить значение фильтра для данного свойства. Выглядит это примерно следующим образом:

Логическое условие следует задать под свои нужды. В рабочем примере автора данной заметки — логическое условие было «больше», потому как значение свойства всегда должно было быть больше текущей даты.

На этом шаге работы закончены. Собственно, если нужна «жесткая» фильтрация по определенной дате, то следующий шаг теряет свою актуальность.

Шаг второй. «Автоматизация» фильтрации по свойству типа «Дата».

Этот шаг и послужил идеей для создания данной заметки. Как было сказано выше — в рабочем примере автора требуется, чтобы фильтрация происходила в «автоматическом» режиме, т.е. в том случае, если сегодняшняя дата равна значению в свойстве «Новинка», то в данном компоненте не должен выводиться данный товар.

Итак, как этого добиться?

В самом деле, это достаточно просто. Нужно в переменную с фильтром (который мы установили на предыдущем шаге), вместо указанного ранее времени поставить переменную, которой передается значение сегодняшней даты.

Выглядит это примерно следующим образом:

1) Объявляем переменную

$testTime= time();

2) Подставляем данную переменную в «CUSTOM_FILTER»

"CUSTOM_FILTER" => "{\"CLASS_ID\":\"CondGroup\",\"DATA\":{\"All\":\"AND\",\"True\":\"True\"},
\"CHILDREN\":[{\"CLASS_ID\":\"CondIBProp:28:286\",\"DATA\":{\"logic\":\"EqGr\",\"value\":$testTime}}]}"

Переменная testTime  в самом конце, после value. К слову, найти нужное место довольно просто, потому как id свойства инфоблока тоже видно в данной строке: В данном случае, оно равно 286.

Вот в целом и все. Данная заметка задумывалась как «памятка» автору на тот случай, если вновь придется делать такую фильтрацию через продолжительный промежуток времени.