День рождения в DLE, просто и красиво



Стандартно в DLE нету вывода дня рождения, можно конечно использовать просто дополнительное поле для этого, но тогда пользователь сможет туда написать всё что угодно и сайт это выведет. Нас этот вариант не устраивает и мы простыми способами реализуем это на сайте.

Реализовываем максимально просто и подключаем все возможности DLE, чтобы в будущем нас не беспокоил данный модуль при обновлении самого движка DLE.

После всех добавлений и изменений, мы получим в профиле пользователя это

Дата рождения 07.01.1991 (27 года)


Инструкция:

1. Заходим в "Настройка профилей пользователей" и нажимаем "Добавить поле"
  • Название поле: birthday
  • Описание поля: Дата рождения (пример: XX.XX.XXXX/ДЕНЬ.МЕСЯЦ.ГОД)
  • Тип поля: одна строка
  • Добавить на страницу регистрации?: Да
  • Поле может быть изменено пользователем?: Да
  • Сделать это поле личным?: Нет
2. Создадим birthday.php, обращайте внимание на кодировку, она должна быть такая же, как и дистрибутив который вы скачивали utf-8 или windows-1251

<?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

birthday-utf-8.zip

birthday-windows-1251.zip

открываем папку /engine/modules/ и создаем в ней еще одну под названием mymod и туда загружаем наш birthday.php. 

Добавим в /templates/Default/userinfo.tpl вывод дополнительного поля и подключение модуля
[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]


Гость, оставишь комментарий?
Имя:*
E-Mail: