Выводим текст или чанк на сайте, по графику.

Всем привет.
Понадобилось мне на сайте выводить мобильный номер оператора техпотдержки, но проблемка
в том, что оператор работает только в будни и только в определенное время.
Чтоб не скрывать номер руками каждый день я написал простенький сниппет, который будет показывать номер на сайте только в нужное мне время.
Возможно кому-то (кто не силен в PHP так же как и я) он будет полезен.


Например мне нужно показывать номер телефона на сайте в пн-пт, с 8-00 до 16-59
Обед с 13-00 до 13-59.

Вызов в шаблоне:
[[!OutputTime? 
&gdays=`1,2,3,4,5`
&ghours=`8,9,10,11,12,14,15,16`
&info=`<div class="mob" style="color:red;">моб. +7 999-000-0000</div>телефон для справок`
]]
Где:
&gdays — Порядковый номер дня недели от 1 (понедельник) до 7 (воскресенье)
&ghours — Часы в 24-часовом формате от 0 до 23
&info — то что нужно выводить на сайте, можно писать текст, код HTML, указать чанк…

Создаем сниппет «OutputTime»:
<?php
/* 
N - Порядковый номер дня недели в соответствии со стандартом ISO-8601 (добавлен в версии PHP 5.1.0)
от 1 (понедельник) до 7 (воскресенье)
***
G -	Часы в 24-часовом формате от 0 до 23
*/

$tday = date("N"); /* Текущий день на сервере */
$thour = date("G"); /* Текущий час на сервере */

$a = explode(",", $gdays); /* Получаем параметры указанные в &gdays */
$b = explode(",", $ghours); /* Получаем параметры указанные в &ghours */

if (in_array($tday, $a)  /* Проверка на соответсвие дня */
    & in_array($thour, $b)) /* Проверка на соответсвие часа*/
return $info; /*Выводим данные из &info  */
G@G
G@G
09 апреля 2015, 13:26
modx.pro
18
3 127
+5

Комментарии: 9

Саша Друмс
09 апреля 2015, 18:53
+1
Спасибо за решение.
Побольше бы люди делились такими ништяками с обычными любителями :-)
    Виктор
    09 апреля 2015, 20:16
    +1
    да это быстрее написать, чем потом в нужный момент найти:)

    А вот телефон прятать не очень хорошая идея, ибо человек может записать его себе и позвонить в рабочее время, а так нужно догадаться зайти на сайт в «рабочее время сайта»
      G@G
      G@G
      09 апреля 2015, 21:48
      +1
      Кому то действительно проще написать.
      Я поэтому и написал «для неискушенных PHP» :). Я вот два дня потратил…

      А насчет скрывать телефон\не скрывать это зависит от ситуации. У меня например такая: два телефона на сайте обычный и мобильный. Мобильный сделали недавно для того чтоб могли дозвонится, на городском почти всегда занято (несколько линий, 2 оператора), теряем клиентов.
      График работы конторы с 8 до 20 (без выходных), а вот оператор на мобильном только до 17 (и с выходными), поэтому пока прячем, чтоб не вводить в заблуждение…
        Сергей Шлоков
        10 апреля 2015, 09:44
        0
        А что мешает человеку, уже знающему мобильный телефон, позвонить после 17-00? Мне кажется логичнее сделать что-то типа «Не дозвонились? Оставьте телефон, мы Вам перезвоним».
          G@G
          G@G
          10 апреля 2015, 13:50
          0
          Просто так пока решили, посмотрим, это временное решение.
          Возможно просто сделаем переадресацию с выключенного мобильного на городской…
          или автоотвечик.
    G@G
    G@G
    09 апреля 2015, 23:01
    0
    Я вообще то хотел получить более универсальное применение, чем просто скрывать\показывать телефон :)
    Например немного доработав\добавив в сниппет else… можно например сделать на сайте цену со скидкой по выходным в утренние часы…
    Можно придумать и другие применения, зависит от задач и потребностей.
      Виктор
      09 апреля 2015, 23:05
      3
      +2
      Хотел писать js галерею, но что-то вдохновения нет;(
      Так что держите немного моего гавнокода(т.к. я не искушен PHP), вдруг пригодится:
      <?php
      /* 
      N - Порядковый номер дня недели в соответствии со стандартом ISO-8601 (добавлен в версии PHP 5.1.0)
      от 1 (понедельник) до 7 (воскресенье)
      ***
      G -	Часы в 24-часовом формате от 0 до 23
      */
      
              
      $weekDay = date("N"); /* Текущий день недели на сервере */
      $day = date("j"); /* Текущий день на сервере */
      $hour = date("G"); /* Текущий час на сервере */
      
      
      
      
      if (in_array($hour, explode(",", $ghours)) || !isset($ghours) ){ /* Проверка на соответсвие часа*/
          switch($gtype) {
              case "evenDays": // Четные дни
                  if( $day%2 == 0 ) {
                      return $info;
                  }
                  break;
                  
              case "oddDays": // Нечетные дни
                  if( $day%2 > 0 ) {
                      return $info;
                  }
                  break;
                  
              case "onDays": // Рабочие дни
                  if( $weekDay != 7 || $weekDay != 6 ) {
                      return $info;
                  }
                  break;
                  
              case "offDays": // Выходные дни
                  if( $weekDay == 7 || $weekDay == 6 ) {
                      return $info;
                  }
                  break;
                  
              case "weekDays": // Дни недели
                  if (in_array($weekDay, explode(",", $gweekDays))){ /* Проверка на соответсвие дня */
                      return $info;
                  }
                  break;
                  
              case "always": // Выходные дни
                  return $info;
                  break;
              
              default:
                  if (in_array($day, explode(",", $gdays))){ /* Проверка на соответсвие дня */
                      return $info;
                  }
              break;
          }
      }
      Вызовы:
      [[!OutputTime? 
      &gdays=`1,2,3,4,5`
      &ghours=`8,9,10,11,12,14,15,16`
      &info=`выводим в указанные дни`
      ]]
      [[!OutputTime? 
      &gtype=`weekDays`
      &gweekDays=`1,2,3,4,5`
      &info=`выводим в указанные дни недели (пн-пт)`
      ]]
      [[!OutputTime? 
      &gtype=`weekDays`
      &gweekDays=`1,2,3,4,5`
      &ghours=`8,9,10,11,12,14,15,16`
      &info=`выводим в указанные дни недели (пн-пт) с 8 до 16`
      ]]
      [[!OutputTime? 
      &gtype=`always`
      &info=`выводим каждый день`
      ]]
      [[!OutputTime? 
      &gtype=`always`
      &ghours=`8,9,10,11,12,14,15,16`
      &info=`выводим каждый день в указанное время`
      ]]
      [[!OutputTime? 
      &gtype=`evenDays`
      &info=`выводим по четным дням`
      ]]
      [[!OutputTime? 
      &gtype=`evenDays`
      &ghours=`8,9,10,11,12,14,15,16`
      &info=`выводим по четным дням в указанное время`
      ]]
      [[!OutputTime? 
      &gtype=`oddDays`
      &info=`выводим по нечетным дням`
      ]]
      [[!OutputTime? 
      &gtype=`oddDays`
      &ghours=`8,9,10,11,12,14,15,16`
      &info=`выводим по нечетным дням в указанное время`
      ]]
      [[!OutputTime? 
      &gtype=`onDays`
      &info=`выводим в рабочие дни`
      ]]
      [[!OutputTime? 
      &gtype=`onDays`
      &ghours=`8,9,10,11,12,14,15,16`
      &info=`выводим в рабочие дни в указанное время`
      ]]
      [[!OutputTime? 
      &gtype=`offDays`
      &info=`выводим в выходные`
      ]]
      [[!OutputTime? 
      &gtype=`offDays`
      &ghours=`8,9,10,11,12,14,15,16`
      &info=`выводим в выходные в указанное время`
      ]]
      Вроде бы все потестил, но возможны ошибки)
        G@G
        G@G
        09 апреля 2015, 23:26
        0
        Спасибо. Очень пригодится.
        Alex Zhuravlev
        11 мая 2015, 00:55
        0
        Спасибо, просто и очень красиво
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          9