Главная  /  Разработки   /  DLE   /  День рождения в DLE, просто и красиво

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

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

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

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

Дата рождения 07.11.1991 (24 года)

Инструкция:

1. Заходим в «Настройка профилей пользователей» и нажимаем «Добавить поле»

  • Название поле: birthday
  • Описание поля: Дата рождения (пример: XX.XX.XXXX/ДЕНЬ.МЕСЯЦ.ГОД)
  • Тип поля: одна строка
  • Добавить на страницу регистрации?: Да
  • Поле может быть изменено пользователем?: Да
  • Сделать это поле личным?: Нет

2. Создадим birthday.php, обращайте внимание на кодировку, она должна быть такая же, как и дистрибутив который вы скачивали utf-8 или windows-1251

<?php
/*
=====================================================
 Web barmen
-----------------------------------------------------
 https://webarmen.com/
-----------------------------------------------------
 © 2016 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-1.zip” ver 1 Скачано 12 раз – 2 KB – md5 08d2bf3da6c7bdc9ad45801467a26327

Скачать “birthday-windows-1251.zip” ver 1 Скачано 10 раз – 2 KB – md5 4b798640b1aab32b4a9883807f472773

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

3. Добавим в /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]

Готово! Можете теперь отредактировать себе профиль и посмотреть 😉

Занимаюсь сайтами с 2005 года, начинал еще с narod.ru и ucoz :-)

1 Комментарий
  • Андрей
    05.06.2018

    Спасибо! Пригодилось.

    Reply
Оставить комментарий
Нажимая кнопку «Отправить», я принимаю пользовательское соглашение и подтверждаю, что ознакомлен и согласен с политикой конфиденциальности этого сайта.