21.05.13, 15:40
0 комментарий
  DLE Хаки

Размещаем на странице кучу счётчиков со своими значениями времени

Скрипт позволяет сделать таймер для каждой новости на сайте, который бы показывал сколько осталось дней до события. Сделать отдельный таймер на странице не проблема, проблема как привязать таймер к новости. А если еще учесть что их будет не 4 не 5, а еще большее количество причём как на главной так и в полной версии новости. Вообщем разбираемся с установкой.

Что потребуется?
Для реализации множества таймеров на одной странице без привязки к id блока и прочим элементам понадобится сам скрипт jQuery Countdown и прямые руки.

Что будем с этим делать?
Самый простой и очевидный способ передачи данных о времени истечения таймера в скрипт - воспользоваться html5-атрибутом data-* им и воспользуемся:

<li data-timer="2013, 5, 18,0,0,0"></li>


Главное чтобы формат даты в атрибуте data-timer должен быть таким:
Год, Месяц, День, Час, Минута, Секунда

В итоге получим вот такую проверочную конструкцию:
    <ul class="counters">
        <li title="Этот таймер кончился"  data-timer="2013,2,17,0,0,15"></li>
        <li title="Тут указаны не все цифры" data-timer="2013,3,12"></li>
        <li title="У этого ещё полно времени" data-timer="2015,4,17,0,0,0"></li>
        <li data-timer="2013, 5, 18,0,0,0"></li>
    </ul>


Далее подключим к странице необходимые скрипты и библиотеки и напишем небольшой скрипт для обработки данных о счётчиках.
В скрипте всё прокомментировано, так что думаю в пояснениях нет необходимости:
    jQuery(document).ready(function($) {
     
        // для всех элементов, которые имеют атрибут data-timer, выполняем следующее действие
        $("[data-timer]").each(function () {
     
            // текущий элемент, обернутый в jquery
            var $this = $(this);
            
            // Получаем описание таймера
            var timerDescription = $this.prop('title');
            // Если у элемента есть title - прибавляем к нему двоеточие и пробел
            if (timerDescription != false) {
                timerDescription = timerDescription+': ';
            };
     
            // получили строку, разбили ее по ","
            var dateArr = $this.data("timer").split(",");
     
            // элементы массива - строки, а для new Date нужны числа
            dateArr = $.map(dateArr, function (elem) {
                return parseInt(elem);
            });
     
            // в html пишем "человеческие" месяцы, здесь преобразуем к js-месяцам
            dateArr[1]--;
     
     
            // конструируем даты
            var date = new Date(dateArr[0], dateArr[1], dateArr[2], dateArr[3], dateArr[4], dateArr[5]);
     
            // инициализируем таймер
            $this.countdown({
                // Берём дату из заранее заготовленной
                until: date,
     
                // Определяем шаблон вывода
                layout:'{desc}<span>{d<}{dn} {dl} и {d>}'+
                '{hn} {hl}, {mn} {ml}, {sn} {sl}</span>',
     
                // Определяем описание
                description: timerDescription
     
                // Ну и про язык не забываем
            }, $.countdown.regional['ru']);
     
        });
    });


И что дальше?
Дальше качаем ниже архив с примером, изучаем как оно работает и внедряем себе на сайт.
Самый простой вариант внедрить это решение в DLE - записывать значения таймеров в дополнительные поля и выводить примено вот так:
    <li data-timer="[xfvalue_timer]"></li>


Версия DLE: 9.x
Автор: ПафНутиЙ

Напишите своё мнение