Наверх

Пошаговая работа скрипта в Console

<?php
// Сколько ресурсов обрабатывать за раз
$step = 1;
// Если процесс уже остановлен, сбрасываем OFFSET
if (!isset($_SESSION['Console']['completed'])) {
    $_SESSION['console_offset'] = 0;
}
$offset = isset($_SESSION['console_offset']) && $_SESSION['console_offset'] ? $_SESSION['console_offset'] : 0;
// Формируем запрос
$q = $modx->newQuery('modResource');
$total = $modx->getCount('modResource', $q);
// Пропускаем все уже обработанные объекты
$q->limit($step, $offset);
$resources = $modx->getCollection('modResource', $q);
// Обработка
foreach ($resources as $resource) {
    print "<p>Processing resource <b>".$resource->get('pagetitle')."</b></p>";
    sleep(0.5);
}
// Меняем offset
$_SESSION['console_offset'] = $offset + $step;
if ($_SESSION['console_offset'] >= $total) {
  $sucsess = 100;
  $_SESSION['Console']['completed'] = true;
  unset($_SESSION['console_offset']);
} else {
  $sucsess = round($_SESSION['console_offset'] / $total, 2) * 100;
  $_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
    if ($i <= $sucsess) {
        print '=';
    } else {
        print '_';
    }
}
$current = isset($_SESSION['console_offset']) ?
           $_SESSION['console_offset'] :
           ($sucsess == 100 ? $total : 0);
print "\n";
print $sucsess.'% ('.$current.')'."\n\n";

Отправить все письма Sendex

<?php
$modx->addPackage('sendex', MODX_CORE_PATH . 'components/sendex/model/');
// Сколько ресурсов обрабатывать за раз
$step = 1;
// Если процесс уже остановлен, сбрасываем OFFSET
if (!isset($_SESSION['Console']['completed'])) {
    $_SESSION['console_offset'] = 0;
}
// Формируем запрос
$q = $modx->newQuery('sxQueue');
$total = $modx->getCount('sxQueue', $q);
// Пропускаем все уже обработанные объекты
$q->limit($step);
$resources = $modx->getCollection('sxQueue', $q);
// Обработка
foreach ($resources as $email) {
    print $email->email_to;
    $email->send();
}
// Меняем offset
if ($total == 0) {
  $sucsess = 100;
  $_SESSION['Console']['completed'] = true;
} else {
  $_SESSION['Console']['completed'] = false;
}
print "\n";
print $total."\n\n";

Обновление всех URL сайта


<?php
// Сколько ресурсов обрабатывать за раз
$step = 1;
// Если процесс уже остановлен, сбрасываем OFFSET
if (!isset($_SESSION['Console']['completed'])) {
    $_SESSION['console_offset1'] = 0;
}
$offset = isset($_SESSION['console_offset1']) && $_SESSION['console_offset1'] ? $_SESSION['console_offset1'] : 0;
// Формируем запрос
$q = $modx->newQuery('modResource');
$total = $modx->getCount('modResource', $q);
print $total.', '.$step.', '.$offset.'
';
// Пропускаем все уже обработанные объекты
$q->limit($step, $offset);
$resources = $modx->getCollection('modResource', $q);
// Обработка
foreach ($resources as $resource) {
    print "<p>Processing resource <b>".$resource->get('pagetitle')."</b></p>";
    $response = $modx->runProcessor('resource/update', array('id' => $resource->id, 'context_key' => $resource->context_key, 'alias' => $resource->cleanAlias($resource->get('pagetitle'))));
    if ($response->isError()) {
        print_r($modx->error->failure($response->getMessage()));
        $modx->error->reset();
    }
    
    $id = $response->response['object']['id'];
}
// Меняем offset
$_SESSION['console_offset1'] = $offset + $step;
if ($_SESSION['console_offset1'] >= $total) {
  print '
complete';
  $sucsess = 100;
  $_SESSION['Console']['completed'] = true;
  unset($_SESSION['console_offset1']);
} else {
  print '
not complete';
  $sucsess = round($_SESSION['console_offset1'] / $total, 2) * 100;
  $_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
    if ($i <= $sucsess) {
        print '=';
    } else {
        print '_';
    }
}
$current = isset($_SESSION['console_offset1']) ?
           $_SESSION['console_offset1'] :
           ($sucsess == 100 ? $total : 0);
print "\n";
print $sucsess.'% ('.$current.')'."\n\n";


4 комментария

  1. Amsterdam 07 февраля 2019, 13:37(Комментарий был изменён) # 0
    Илья, а с таким не подскажешь? Код, создает ресурс, получает и заполняет TVшки у новоиспеченного ресурса. Задачка: если ресурс с такими url уже есть, перезаписать все данные заново. Не могу заставить обновлять:

    //  Создаем новый ресурс
            $response = $modx->runProcessor('resource/create', array(
            'pagetitle' => $main_heading,
            'alias' => "$main_heading-id6",
            'content' => '',
            'template' => 3,
            'published' => 1,
            'parent' => 662
    ));
    
    // Получаем в качестве объекта вновь созданную страницу и записываем TVшки
    $idResource = $response->response['object'];
    $res = $modx->getObject('modResource', $idResource['id']);
    $res->setTVValue('shopRoot', $shop_root);
    $res->setTVValue('foto', "templates/img/parsefoto/id6/$foto_name");
    $res->setTVValue('price', $price_result);
    
    if (is_object($response)) {
        $res->set('pagetitle', 'Другой заголовок страницы'); 
        // Сохранение
    } else {
        echo 'Документ не найден';
    }
        
    }
      
    $res->save();
    1. Илья Уткин 08 февраля 2019, 08:57 # 0
      Надо сначала проверять, есть ли ресурс или нет, а потом выполнять нужное действие:

      <?php
      // Вынесем данные ресурса в отдельный массив
      $data = [
          'pagetitle' => $main_heading,
          'alias' => "$main_heading-id6",
          'content' => '',
          'template' => 3,
          'published' => 1,
          'parent' => 662
      ];
      
      // По умолчанию действие - создать ресурс
      $action = 'resource/create';
      
      // Если такой ресурс уже есть, действие - обновить ресурс
      if ($res = $modx->getObject('modResource', ['alias' => $data['alias']])) {
          $action = 'resource/update';
      
          // Для редактирования нужен будет ID
          $data['id'] = $res->id;
      }
      
      // Запис ТВ-шек тоже можеть происходить через процессор
      $shopRootTV = 'tv12'; // Указываем ID ТВ-шек
      $fotoTV = 'tv4';
      $priceTV = 'tv5';
      
      $data[$shopRootTV] = $shop_root;
      $data[$fotoTV] = "templates/img/parsefoto/id6/$foto_name";
      $data[$priceTV] = $price_result;
      
      // Выполняем сразу всё (и создание, и обновление, и заполнение ТВ)
      $response = $modx->runProcessor($action, $data);
      
      if ($response->isError()) {
          echo $modx->error->failure($response->getMessage());
      } else {
          echo "Resource <b>{$data['pagetitle']}</b> processed";
      }
      
      1. Amsterdam 14 февраля 2019, 06:55 # 0
        Класс, спасибо!!! Вроде все работает! Не могу понять правда, обновляет оно или нет по факту, но процесс завершается) Вместо заголовков ресурсов выдает Array при обновлении, но думаю при этом обновление происходит
        1. Amsterdam 14 февраля 2019, 09:37 # 0
          Не, все таки не отрабатывает как нужно. Не пересоздает заново…

      Авторизация

      через сервис Loginza:

      Подписка или RSS

      Буду присылать новые статьи — никакого спама



      Шаблоны MODX

      1 2 Дальше »

      Объектная
      модель
      MODX