Недавно пришлось сделать небольшой виджет, вида "Праздник дня". который вправом блоке сайта выводил бы сегоднешний праздник.
Для этог опришлось создать пользовательское поле типа "Дата/Время" с сивольным кодом "CELEBRATE_DATE" в котором я указываю дату праздника и по этому полю получать информацию в виджет.
Вся соль в том, что в документации по фильтрам написана следующая конструкция
Битрикс не конвертирует сам дату в необходимый формат.
В базе данных дата хранится в следующем формате "d-m-YYYY H:i:s" , и нам необходимо любым способом привести ее к этому формату.
У битрикса есть методы по приведению даты к нужному формату, например,
Но мне этот метод не подошел и я воспользовался встроенной функцией в PHP
Теперь можно приступить к созданию фильтра для компонента
Все, наш фильтр готов к использованию.
Так же кроме точного совпадения мы можем задавать условия:
После текущей даты
Для этог опришлось создать пользовательское поле типа "Дата/Время" с сивольным кодом "CELEBRATE_DATE" в котором я указываю дату праздника и по этому полю получать информацию в виджет.
Вся соль в том, что в документации по фильтрам написана следующая конструкция
$arFilter = array( "PROPERTY_CODE" => "VALUE", );Эта запись подходит для полей типа строка, число, но не для даты.
Битрикс не конвертирует сам дату в необходимый формат.
В базе данных дата хранится в следующем формате "d-m-YYYY H:i:s" , и нам необходимо любым способом привести ее к этому формату.
У битрикса есть методы по приведению даты к нужному формату, например,
$DB->CharToDateFunction(date("d.m.2010 00:00:00") );
Но мне этот метод не подошел и я воспользовался встроенной функцией в PHP
date("2010-m-d 00:00:00")
Теперь можно приступить к созданию фильтра для компонента
$arFilter = array( "PROPERTY_CELEBRATE_DATE" => date("2010-m-d 00:00:00"), "SECTION_CODE" => "celebration-of-the-day", "IBLOCK_ID" => "7" );С остальными полями фильтра проблем возникнуть недолжно.
Все, наш фильтр готов к использованию.
Так же кроме точного совпадения мы можем задавать условия:
После текущей даты
arFilter = array( ">PROPERTY_CELEBRATE_DATE" => date("YYYY-m-d 00:00:00") );До текущей даты
$arFilter = array( "<PROPERTY_CELEBRATE_DATE" => date("YYYY-m-d 00:00:00") );Все даты кроме этой
$arFilter = array( "!PROPERTY_CELEBRATE_DATE" => date("YYYY-m-d 00:00:00") );
Комментариев нет:
Отправить комментарий