Вед-дев, Сео, Манимейкинг

Снять ноды с публикации по таймеру

Данный функционал актуален для тех, кто хочет публиковать акции на своем сайте. Допустим, у нас есть тип нод "Акция", каждая нода типа "Акция" - это действующая акция на вашем сайте. Акции действуют только какое-то определенное время, после чего они уходят в архив или исчезают.

В нашем примере, мы будем отображать сразу несколько акций на одной странице. Мы создадим 2 ноды типа "Акция" и выведем их при помощи Views на главной странице.

Для автоматического снятия нод с публикации мы будем использовать модуль:

http://drupal.org/project/scheduler

Для удобного выбора даты снятия с публикации:

http://drupal.org/project/date

Настройка Scheduler

Заходим в настройки управления полями вашего типа материала admin/structure/types/manage/akciya, где "akciya" - это ваш тип материала.

Ставим необходимые галочки и выбираем "Separate fieldset", т.к. это намного удобнее чем вертикальная вкладка.

Снять ноды с публикации по таймеру

Теперь добавляем ноду типа "Акция". При добавлении вы увидите филдсет Scheduler в котором необходимо выбрать дату снятия с публикации.

scheduler2.png

По умолчанию, поле добавления времени выглядит таким образом часы:минуты:секунды (Y-m-d H:i:s), если вас это не устраивает и вы хотите сделать как на изображении выше, тогда идем в настройки admin/config/content/scheduler и меняем формат даты на Y-m-d H:i

Сохраняем ноду и ждём указанного времени снятия публикации ноды. Снятие публикации происходит при каждом запуске крона. Для того чтобы не грузить сервер частыми запусками крона, у модуля Scheduler есть свой "Lightweight cron". Необходимо его прописать следующим образом:

*/1 * * * * curl -s -o /dev/null http://domain.com/scheduler/cron

Мы прописали запуск крона на каждую минуту, для того чтобы ноды снимались с публикации в точно указанное время.

Далее, на странице admin/config/content/scheduler/cron убираем галочку с "Log every activation and completion message.", т.к. это заспамит наши логи.

На этом настройки Scheduler завершены. Мы можем создавать ноды и указывать время снятия с публикации.

Настройки Views

Создаем новый View и добавляем все необходимые поля. Для того чтобы отображать количество времени до снятия с публикации нужно добавить поле: "Scheduler: Unpublish countdown" и выбираем настройки как на изображении ниже.

scheduler3.png

В итоге будет отображаться время до снятия с публикации ноды в таком виде: 150000 seconds. Но этот вид является не очень понятным для людей, поэтому прибежим к использованию библиотеки jQuery-countdown.

Использование jQuery-countdown

Посмотреть демку можно тут: http://keith-wood.name/countdown.html
Документация: http://keith-wood.name/countdownRef.html

Качаем файлы:

  • jquery.countdown.min.js
  • jquery.countdown.css

Прописываем их в info файле. Чистим кеш друпала. Вставляем js-код (желательно в отдельный файл, а не в page.tpl.php):

// jquery countdown
$('.selector').each(function() {
  var seconds = $(this).text(); // получаем количество секунд до снятия
  var secResult = seconds.replace("seconds", ""); // убираем текст seconds

  $('.subselector', this).countdown({
    until: new Date(new Date().getTime() + (secResult * 1000)),
    format: 'HMS', // показыввать только часы, минуты и секунды
    onExpiry: reloadPage, // перезагружает страницу по окончании времени
    compact: true // показывает только цифры, разделители и само время
  });
});

function reloadPage() {
  location.reload();
}

Примерная HTML-структура:

<div class="selector">
  <div class="subselector"></div>
</div>

Мы используем .each() потому-что мы показываем сразу 2 акции с таймерами, иначе везде будут показываться сразу по 2 таймера. Почитать про .each() можете по этой ссылке.

В итоге получаем 2 ноды с акциями, которые выводятся при помощи Views на главной странице и таймеры к каждой акции при помощи jQuery-Countdown, после того, как истекет время до снятия с публикации - будет перезагружена страница и этой ноды не будет видно, т.к. она становится не опубликованной (убирается галочка в настройках ноды c "Опубликовано).

Все ноды, у которых активен таймер до снятия можно посмотреть по URL admin/content/scheduler

PS Незнаете как правильно сделать инъектирование микроцемента? Почитайте материал от Сыщикова Ивана Петровича!



Комментарии (0)

Разделы

Подписаться

Подписка на RSS-лента последние записи из Блога

Комменты

  • Olzhas 5 месяцев 3 недели назад
    Спасибо. С Новым Годом! 
  • Den 6 месяцев 3 недели назад
    В первой функции, при создании переменной $li_previous нужно поменять '←' с NULL, в $li_next сделать тоже самое. 
  • Гость 6 месяцев 3 недели назад
    Если все ровно так как было описано, то нет никаких сомнений что домен увел сам регистратор. Потому что вероятность того 
  • Валерий 7 месяцев 2 недели назад
    да можно делать импорт-экспорт только лишь в оболочке на входя на mysql сервер 
  • admin 7 месяцев 2 недели назад
    Валерий, а зачем вам именно так делать экспорт? Если я не ошибаюсь, то там нет какой-либо команды чтобы сделать экспорт 
  • Валерий 7 месяцев 3 недели назад
    захожу на mysql через ssh по команде  
  • admin 7 месяцев 3 недели назад
    Добрый вечер, какой у вас клиент? 
  • Валерий 7 месяцев 3 недели назад
    Здравстуйте, есть команда чтобы сделать экспорт базы внутри mysql клиента? 
  • Eduard 8 месяцев 6 дней назад
    Видать, домен хороший был. Заявление пробывали писать на мошенника? 
  • Stas 9 месяцев 2 недели назад
    Ошибка в ключе квантификатора - replace(/будешь|пить/ig, "хлеб"); Указать -g для прохода по всем совпадениям!