Стандартно в DLE нету вывода дня рождения, можно конечно использовать просто дополнительное поле для этого, но тогда пользователь сможет туда написать всё что угодно и сайт это выведет. Нас этот вариант не устраивает и мы простыми способами реализуем это на сайте.
Реализовываем максимально просто и подключаем все возможности DLE, чтобы в будущем нас не беспокоил данный модуль при обновлении самого движка DLE.
После всех добавлений и изменений, мы получим в профиле пользователя это
<?php
/*
=====================================================
Web barmen
-----------------------------------------------------
https://viproger.ru/
-----------------------------------------------------
© 2018 Copyright by barmen
=====================================================
Данный код защищен авторскими правами
=====================================================
Файл: birthday.php
-----------------------------------------------------
Версия: 1.0
-----------------------------------------------------
Назначение: Вывод дня рождения пользователя
=====================================================
*/
if( ! defined( 'DATALIFEENGINE' ) ) {
die( "Hacking attempt!" );
}
preg_match( "/([0-9]{1,2})\.([0-9]{1,2}).([0-9]{1,4})/", $birthday, $match ); // находим наши цифры
$timeYear = langdate( "Y", time (), true ); // определим нынешний год
$dateD = $match[1]; // день
$dateM = $match[2]; // месяц
$dateY = $match[3]; // год
if( $dateD <= 31 AND $dateM <= 12 AND $dateY < $timeYear AND $dateY >= $timeYear-140 ) { // проверяем адекватность заполнения дня рождения
function getAge($y, $m, $d) {
if($m > date('m') || $m == date('m') && $d > date('d'))
return (date('Y') - $y - 1); // если ДР в этом году не было, то ещё -1
else
return (date('Y') - $y); // если ДР в этом году был, то отнимаем от этого года год рождения
}
$getAge = getAge($dateY, $dateM, $dateD); //получаем количество лет
function number($n, $titles) {
$cases = array(2, 0, 1, 1, 1, 2);
return $titles[($n % 100 > 4 && $n % 100 < 20) ? 2 : $cases[min($n % 10, 5)]];// правильно склоняем сколько нам лет или годиков :)
}
$getNumber = number($getAge, array('год', 'года', 'лет')); // правильно склоняем
echo $dateD.".".$dateM.".".$dateY." (".$getAge." ".$getNumber.")";
} else { // если заполнили не верно, то удаляем
echo "Ошибка! День рождения должно быть формата XX.XX.XXXX/ДЕНЬ.МЕСЯЦ.ГОД";
$row = $db->super_query( "SELECT xfields FROM ".PREFIX."_users WHERE email = '{$memberid}'" );
$row['xfields'] = preg_replace("#birthday\|(.+?)\|\|#is",'',$row['xfields']);
$row['xfields'] = preg_replace("#\|\|birthday([^\]]+)#is",'',$row['xfields']);
$row['xfields'] = preg_replace("#birthday([^\]]+)#is",'',$row['xfields']);
$db->query( "UPDATE ".PREFIX."_users SET xfields='".$row['xfields']."' WHERE user_id = email = '".$memberid."'" );
}
?>
или вы можете скачать для своей версии DLE[xfgiven_birthday]<li><div class="ui-c1 grey">День рождения</div> <div class="ui-c2">{include file="engine/modules/mymod/birthday.php?birthday=[xfvalue_birthday]&memberid={editmail}"}</div></li>[/xfgiven_birthday]