Для этого нужно использовать события, к примеру.
Поскольку Вы хотите указывать только дату дня рождения, а остальные поля за Вас должна заполнять система автоматически, то следует создать событие, которые будет выполнятся каждый раз при добавлении элемента.
В событие передается массив полей создаваемого элемента $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 нужного инфоблока")
}
}
?> |