EvoCron

Написал плагин, что-то на подобие сильно урезанного крона до минут.
Как работает: Плагин проходит по всем СНИППЕТАМ и в их описании ищет свои параметры, их обрабатывает и запускает сниппет в нужную минуту с указанными параметрами.
Что нужно чтобы работал: просто нужно, чтобы было окно админки открытым.

Пример описания сниппета:
возвращает погоду в городе #evocron,11,12,13,14,15,19 # {'city':'bakhchysaray'}

Формат:
любое_описание_вашего_сниппета #evocron,минуты_через_запятую # json_строка_но_с_одинарными_кавычками


События для плагина: OnManagerTopPrerender, OnPageNotFound

Обязательно в порядке вызова плагинов укажите плагин первым на событие OnPageNotFound.

Сам плагин: evocron

$e= &$modx->Event;
if ($e->name == 'OnPageNotFound') { 
$select = $modx->db->select("id, name, description", $modx->getFullTableName('site_snippets'), "description LIKE '%#evocron,%'");
$curminute=date("i");	
$lrun="ожидание";
while ($query = $modx->db->getRow($select)){
 $dt=explode("#evocron",$query['description']); 
 $dt=explode("#",$dt[1]);  
 if (strpos($dt[0],",$curminute")){  
  if (count($dt)>0) $args=json_decode(str_replace("'",'"',trim($dt[1])),true);    
  $ret = $modx->runSnippet($query['name'], $args);
  $lrun="запуск ".$query['name'];
 }
}	
 echo "evocron: $lrun ".date("d.m.Y H:i");
 die();
}
$e->output("
<script>
 setInterval(function () { autoloadpage(); }, 60000); 
 function autoloadpage() {
  console.log('autoloadpage');
     $.ajax({
                url: '/docron',
                type: 'GET',
                success: function(data) {
                    $('div#evocron').html(data);
                }
            });
        }
        </script>
 <div id='evocron' style='font-size: 11px; color: yellow; z-index: 999; top: 21px; right: 0px; position: absolute;'>
   evocron
 </div>
");





0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.