Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Установить период активности

00 голосов
1
Помогите пожалуйста!
Есть инфоблок с днями рождения, в нем есть свойство "дата рождения", необходимо, чтобы период активности высчитывался относительно даты рождения, т.е 5 дней до и 5 дней после.
Подскажите пожалуйста как это сделать!
спросил 22 Окт, 13 от deadIdiot (160 баллов)

1 Ответ

00 голосов
Для этого нужно использовать события, к примеру.
Поскольку Вы хотите указывать только дату дня рождения, а остальные поля за Вас должна заполнять система автоматически, то следует создать событие, которые будет выполнятся каждый раз при добавлении элемента.

В событие передается массив полей создаваемого элемента $arFields, вернее массив ссылок на поля и свойства. Тут можно проверить, добавляется ли элемент именно в тот инфоблок, какой Вас интерисует, так как в полях передается в том числе и IBLOCK_ID.

Код
if ($arFields["IBLOCK_ID"]=="ID нужного инфоблока") 


Для элементов нужного инфоблока берем значение вашего свойства

Код
$arFields["PROPERTY_VALUES"]["ID вашего свойства"] 


Поскольку это дата, то нужно ее распарсить


Код
$format = "DD.MM.YYYY HH:MI:SS"; 
$birthday = ParseDateTime($arFields["PROPERTY_VALUES"]["ID вашего свойства"],$format); 
 



Теперь в intval($birthday["DD"]) мы получили "день" рождения
intval($birthday["MM"]) - месяц
intval($birthday["YYYY"]) - год.
Вычитаем сколько-нибудь дней из даты начала активности учитывая, что, если я родился 3-го числа, то пробовать отнимать от меня 5 не стоит. В общем откатываем дату на 5 дней назад. Изменяем месяц, если нужно и собираем новую дату из полученных кусочков назад. Тоже самое делаем и для поля конца активности.
Код
$newDate = $birthday["DD"].$birthday["MM"].$birthday["YYYY"]; 

B наконец записываем все это в


Код
$arFields["DATE_ACTIVE_FROM"] = $newDate; 
 



Весь код помещаем в файл init.php вот так


Код
<?    AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("MyClass", "OnBeforeIBlockElementAddHandler")); 
    
    
class MyClass {   
      function OnBeforeIBlockElementAddHandler(&$arFields) { 

                //наш код начиная с 
                  if ($arFields["IBLOCK_ID"]=="ID нужного инфоблока") 
                } 
}  
?>
ответил 18 Ноя, 13 от Tetis (500 баллов)

Похожие вопросы

0 голосов
1 ответ
0 голосов
10 ответов
0 голосов
5 ответов
0 голосов
6 ответов