Головна » Блоги » InstantCMS - переваги та недоліки системи » Нагадуємо автору про завершення терміну його публікаціїї в InstantCMS 2-х

Нагадуємо автору про завершення терміну його публікаціїї в InstantCMS 2-х

+1
Голосів: 1
Опубліковано: 2018 / 01 / 04
Переглядів: 303
Категорія: Різне
Редагувалося: 5 раз — останній 25 січень 2018
Вітаю!
Часто виникає необхідність нагадати автору запису про те, що закінчується термін його публікації.
Щоб не виходити за межі шаблону, весь код розмістимо в одному файлі.
Для початку скопіюємо файл templates > default > content > default_item.tpl.php в папку content свого шаблону. Якщо необхідніть нагадування є тільки в певному типі контенту, то можна додатково переназвати файл за таким принципом: системна_назва_типу_контента__item.tpl.php. Для прикладу: board_item.tpl.php

Далі скопіюйте, та вставте в потрібному місці наведений нижче код:
Код PHP:
  1.  
  2. <?php if((cmsUser::getInstance()->id == $item['user']['id'] || cmsUser::isAdmin()) && !empty($item['date_pub_end'])) { ?>
  3. <?php
  4. $date_pub_end = date_create($item['date_pub_end']);
  5. //запись будет снята с публикации в конце дня, потому прибавляем 1день к $item['date_pub_end']
  6. date_add($date_pub_end, date_interval_create_from_date_string('1 days'));
  7. $date_pub_end_true = date_format($date_pub_end, 'Y-m-d H:i:s');
  8.  
  9. function diff($date_pub_end_true, $today_date = NULL) {
  10.  
  11. $today_date = new DateTime('now');
  12.  
  13. $time_left = $today_date->diff($date_pub_end_true, false);
  14. $days = $time_left->days;
  15.  
  16. // до окончания публикации осталось:
  17. $time_left->s = $date_pub_end_true->getTimestamp() - $today_date->getTimestamp();//секунд
  18. $time_left->i = floor($time_left->s / 60);//минут
  19. $time_left->h = floor($time_left->s / 3600);//часов
  20. $time_left->d = $days;//дней
  21.  
  22. return $time_left;
  23. }
  24.  
  25. $time_left = diff(new DateTime($date_pub_end_true));
  26.  
  27. ?>
  28.  
  29. <?php
  30. //выводим сообщения, если до окончания срока публикации осталось меньше 30 дней
  31. if($time_left->d < 30) {
  32. ?>
  33. <div class="pub-end-notice">
  34. <?php if ($time_left->h <= 0) { ?>
  35. <div class="red-notice">Публикация записи прекращена!</div>
  36. <?php } elseif($time_left->h < 24) { ?>
  37. <div class="red-notice">Сегодня, в 24:00, публикация записи будет прекращена!</div>
  38. <?php } elseif($time_left->h < 48) { ?>
  39. <div class="orange-notice">Завтра в 24:00 публикация записи будет прекращена!</div>
  40. <?php } else { //выведутся только целые дни (часы) до окончания срока публикации ?>
  41. <div class="green-notice">Публикация записи будет прекращена через <?php html(string_date_age_max($date_pub_end_true)); ?>!</div>
  42. <?php } ?>
  43. </div>
  44. <?php } ?>
  45. <style>
  46. .pub-end-notice {
  47. font-weight: 700;
  48. margin: 15px 0;
  49. }
  50. .green-notice {
  51. color: green;
  52. font-size: 1.3em;
  53. }
  54. .orange-notice {
  55. color: orange;
  56. font-size: 1.5em;
  57. }
  58. .red-notice {
  59. color: red;
  60. font-size: 2em;
  61. }
  62. </style>
  63. <?php } ?>
  64.  
В коді все відкоментовано. Розібратися та змінити під свої потреби не складе проблем.
Змініть на потрібні значення умов: if($time_left->d < 30) та if ($time_left->h <= 0)
До речі, остання зроблена таким чином, що текст попередження можна змінювати мало не щогодини (для прикладу, виводяться різні тексти за 48 та 24 години до закінчення терміну публікаціїї, та після ії завершення).

Стиль текстів зроблено тільки для прикладу. Змініть його на свій смак.

Не забудьте помітити для себе змінений файл, щоби випадково не затерти при оновленнях, та внести в нього відповідні зміни при необхідності (наприклад, при тих же оновленнях).

Миру вам!

Читайте також:

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

Немає коментарів. Ваш буде першим!