Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Отображение даты как на кинопрофи и в вк

Тема в разделе "Хаки DLE", создана пользователем DLEPlugins, 28 июн 2017.

28.06.17 в 22:27
26.03.19 в 17:36
3
1.558
2
  1. TopicStarter Overlay
    DLEPlugins

    Кодер

    Регистрация:
    29 ноя 2015
    Сообщения:
    1.608
    Лучших ответов:
    8
    Рейтинги:
    +1.194 / 9 / -0
    В честь повышения на форуме выложу такой вот ништяк. Данным хаком мы сделаем дату в краткой и полной новости как на кинопрофи или вк, вида 5 минут назад, 2 часа назад, день назад и так далее.
    Т.е. так
    Screenshot_3.jpg Screenshot_4.jpg Screenshot_5.jpg

    Открываем любой js файл подключенный к шаблону, ищем в нем
    Код:
    $(document).ready(function(){
    ниже вставляем
    Код:
    (function (factory) {
      if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define(['../../../engine/classes/js/jquery'], factory);
      } else {
        // Browser globals
        factory(jQuery);
      }
    }(function ($) {
      $.timeago = function(timestamp) {
        if (timestamp instanceof Date) {
          return inWords(timestamp);
        } else if (typeof timestamp === "string") {
          return inWords($.timeago.parse(timestamp));
        } else if (typeof timestamp === "number") {
          return inWords(new Date(timestamp));
        } else {
          return inWords($.timeago.datetime(timestamp));
        }
      };
      var $t = $.timeago;
    
      $.extend($.timeago, {
        settings: {
          refreshMillis: 60000,
          allowFuture: false,
          localeTitle: false,
          strings: {
            prefixAgo: null,
            prefixFromNow: null,
            suffixAgo: "ago",
            suffixFromNow: "from now",
            seconds: "less than a minute",
            minute: "about a minute",
            minutes: "%d minutes",
            hour: "about an hour",
            hours: "about %d hours",
            day: "a day",
            days: "%d days",
            month: "about a month",
            months: "%d months",
            year: "about a year",
            years: "%d years",
            wordSeparator: " ",
            numbers: []
          }
        },
        inWords: function(distanceMillis) {
          var $l = this.settings.strings;
          var prefix = $l.prefixAgo;
          var suffix = $l.suffixAgo;
          if (this.settings.allowFuture) {
            if (distanceMillis < 0) {
              prefix = $l.prefixFromNow;
              suffix = $l.suffixFromNow;
            }
          }
    
          var seconds = Math.abs(distanceMillis) / 1000;
          var minutes = seconds / 60;
          var hours = minutes / 60;
          var days = hours / 24;
          var years = days / 365;
    
          function substitute(stringOrFunction, number) {
            var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
            var value = ($l.numbers && $l.numbers[number]) || number;
            return string.replace(/%d/i, value);
          }
    
          var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
            seconds < 90 && substitute($l.minute, 1) ||
            minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
            minutes < 90 && substitute($l.hour, 1) ||
            hours < 24 && substitute($l.hours, Math.round(hours)) ||
            hours < 42 && substitute($l.day, 1) ||
            days < 30 && substitute($l.days, Math.round(days)) ||
            days < 45 && substitute($l.month, 1) ||
            days < 365 && substitute($l.months, Math.round(days / 30)) ||
            years < 1.5 && substitute($l.year, 1) ||
            substitute($l.years, Math.round(years));
    
          var separator = $l.wordSeparator || "";
          if ($l.wordSeparator === undefined) { separator = " "; }
          return $.trim([prefix, words, suffix].join(separator));
        },
        parse: function(iso8601) {
          var s = $.trim(iso8601);
          s = s.replace(/\.\d+/,""); // remove milliseconds
          s = s.replace(/-/,"/").replace(/-/,"/");
          s = s.replace(/T/," ").replace(/Z/," UTC");
          s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
          return new Date(s);
        },
        datetime: function(elem) {
          var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
          return $t.parse(iso8601);
        },
        isTime: function(elem) {
          // jQuery's `is()` doesn't play well with HTML5 in IE
          return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
        }
      });
    
      // functions that can be called via $(el).timeago('action')
      // init is default when no action is given
      // functions are called with context of a single element
      var functions = {
        init: function(){
          var refresh_el = $.proxy(refresh, this);
          refresh_el();
          var $s = $t.settings;
          if ($s.refreshMillis > 0) {
            setInterval(refresh_el, $s.refreshMillis);
          }
        },
        update: function(time){
          $(this).data('timeago', { datetime: $t.parse(time) });
          refresh.apply(this);
        }
      };
    
      $.fn.timeago = function(action, options) {
        var fn = action ? functions[action] : functions.init;
        if(!fn){
          throw new Error("Unknown function name '"+ action +"' for timeago");
        }
        // each over objects here and call the requested function
        this.each(function(){
          fn.call(this, options);
        });
        return this;
      };
    
      function refresh() {
        var data = prepareData(this);
        if (!isNaN(data.datetime)) {
          $(this).text(inWords(data.datetime));
        }
        return this;
      }
    
      function prepareData(element) {
        element = $(element);
        if (!element.data("timeago")) {
          element.data("timeago", { datetime: $t.datetime(element) });
          var text = $.trim(element.text());
          if ($t.settings.localeTitle) {
            element.attr("title", element.data('timeago').datetime.toLocaleString());
          } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
            element.attr("title", text);
          }
        }
        return element.data("timeago");
      }
    
      function inWords(date) {
        return $t.inWords(distance(date));
      }
    
      function distance(date) {
        return (new Date().getTime() - date.getTime());
      }
    
      // fix for IE6 suckage
      document.createElement("abbr");
      document.createElement("time");
    }));
    
    // Russian
    (function() {
      function numpf(n, f, s, t) {
        // f - 1, 21, 31, ...
        // s - 2-4, 22-24, 32-34 ...
        // t - 5-20, 25-30, ...
        var n10 = n % 10;
        if ( (n10 == 1) && ( (n == 1) || (n > 20) ) ) {
          return f;
        } else if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) {
          return s;
        } else {
          return t;
        }
      }
    
      jQuery.timeago.settings.strings = {
        prefixAgo: null,
        prefixFromNow: "через",
        suffixAgo: "назад",
        suffixFromNow: null,
        seconds: "меньше минуты",
        minute: "минуту",
        minutes: function(value) { return numpf(value, "%d минута", "%d минуты", "%d минут"); },
        hour: "час",
        hours: function(value) { return numpf(value, "%d час", "%d часа", "%d часов"); },
        day: "день",
        days: function(value) { return numpf(value, "%d день", "%d дня", "%d дней"); },
        month: "месяц",
        months: function(value) { return numpf(value, "%d месяц", "%d месяца", "%d месяцев"); },
        year: "год",
        years: function(value) { return numpf(value, "%d год", "%d года", "%d лет"); }
      };
    })();
     
        $("time.ago").timeago();
    Теперь в fullstory.tpl или shortstory.tpl вставляем в то место где будем выводить дату код
    Код:
    <time datetime="{date=Y-m-d}T{date=H:i:s}" class="ago">{date=Y-m-d}</time>
    В конце очищаем кеш и жмем ctrl+f5
     
    • Нравится Нравится x 2
    • Полезно Полезно x 2
  2. Flerox

    VIP Кинотрафик v2

    Регистрация:
    12 окт 2015
    Сообщения:
    114
    Лучших ответов:
    0
    Рейтинги:
    +11 / 0 / -0
    Спасибо

    Только проблема одна, только добавил фильм и он мне пишет что добавил 8 часов назад=)
     
    #2 Flerox, 29 июн 2017
    Последнее редактирование модератором: 29 июн 2017
  3. ZerocooL

    Команда форума Администратор VIP Кинотрафик v2

    Регистрация:
    29 янв 2015
    Сообщения:
    8.679
    Лучших ответов:
    9
    Мануалы:
    31
    Рейтинги:
    +5.089 / 210 / -1
    Flerox разница настроек сервера (дата время) и твоего ПК
     
    • Нравится Нравится x 2
  4. Tolstyak87

    Tolstyak87 Бывалый

    Регистрация:
    21 мар 2018
    Сообщения:
    556
    Лучших ответов:
    2
    Рейтинги:
    +60 / 18 / -0
    А у меня просто дату выводит, даже фильм, который добавлен сегодня пишет 2019-03-26

    Кэшь не удалил...:D:D:D
     
    #4 Tolstyak87, 26 мар 2019
    Последнее редактирование: 27 мар 2019
Яндекс.Метрика