Наверх

Пошаговая работа скрипта в 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";


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

  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
          Не, все таки не отрабатывает как нужно. Не пересоздает заново…
      2. Amsterdam 28 февраля 2019, 12:59 # 0
        Путен памаги! Илья помоги! Последний штрих так сказать остался. Сейчас вернулся к этой теме, ну не обновляет оно и все тут. Операция завершается, но данные не перезаписывает. Голову сломал, не могу подобрать «ключик»
        1. Дмитрий 10 декабря 2021, 16:05 # 0
          Добрый день!

          Нужно выполнить импорт страниц. В прошлом году программист помогал, а теперь он куда-то исчез. Оставил вот такую инструкцию:

          Нужно выполнить в консоли данную команду убедившись что там код раскомментирован и убрана точка останова (exit)

          php -f plugins/c_import.php


          Консоль смог запустить, а вот как выполнить команду сообразить не могу. Далек от программирования. Поможете? =)
          1. Илья Уткин 13 декабря 2021, 08:32 # 0
            Добрый день. Это не та консоль, вам нужна консоль SSH. Ну и лучше нанять какого-нибудь специалиста, чтобы он вам помог. Не думаю, что это будет дорого. Напишите на https://modx.pro/work
            1. Дмитрий 13 декабря 2021, 12:18 # 0
              Спасибо!

          Авторизация

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


          Шаблоны MODX

          1 2 Дальше »

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