Недавно пришлось сделать небольшой виджет, вида "Праздник дня". который вправом блоке сайта выводил бы сегоднешний праздник.
Для этог опришлось создать пользовательское поле типа "Дата/Время" с сивольным кодом "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")
);
Комментариев нет:
Отправить комментарий