Пошаговая работа скрипта в Console
11 декабря 2014, 10:46
<?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";
// Создаем новый ресурс $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();<?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"; }Путен памаги!Илья помоги! Последний штрих так сказать остался. Сейчас вернулся к этой теме, ну не обновляет оно и все тут. Операция завершается, но данные не перезаписывает. Голову сломал, не могу подобрать «ключик»Нужно выполнить импорт страниц. В прошлом году программист помогал, а теперь он куда-то исчез. Оставил вот такую инструкцию:
Нужно выполнить в консоли данную команду убедившись что там код раскомментирован и убрана точка останова (exit)
php -f plugins/c_import.php
Консоль смог запустить, а вот как выполнить команду сообразить не могу. Далек от программирования. Поможете? =)