Пошаговая работа скрипта в Console
Здравствуйте, необходимо выполнить данный скрипт
$q = $modx->newQuery('msProduct');
$q->where(array('parent' => '9'));
$col = $modx->getCollection('msProduct', $q);
foreach ($col as $item){
$oe_number = $item->get('oe_number');
$article = $item->get('article');
$old_price = $item->get('old_price');
$price = $old_price * 1.2;
$item->set('price', $price);
if (empty($oe_number)) {
$item->set('oe_number', $article);
}
$item->save();
}
Но так как товаров порядка 30 000, то нужно разбить на пошаговое выполнение, нашел данную шпаргалку — ilyaut.ru/cheats/step-by-step-the-script-in-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('msProduct');
$q->where(array('parent' => '9'));
$total = $modx->getCount('msProduct', $q);
// Пропускаем все уже обработанные объекты
$q->limit($step, $offset);
$resources = $modx->getCollection('msProduct', $q);
// Обработка
foreach ($resources as $resource){
$oe_number = $resource->get('oe_number');
$article = $resource->get('article');
$old_price = $resource->get('old_price');
$price = $old_price * 1.2;
$resource->set('price', $price);
if (empty($oe_number)) {
$resource->set('oe_number', $article);
}
$resource->save();
print "<p>Processing resource <b>".$resource->get('pagetitle')."</b></p>";
}
// Меняем 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";
Подскажите, как правильно написать пошаговое выполнение скрипта Комментарии: 7
Вроде правильно скрипт написан… А что не получается?
В общем Loading… постоянно
Я так понимаю должен быть статусбар выполнения
Есть ещё такой вариант.
В общем перекинул сайт на timeweb, запустил скрипт и всё заработало.
Основной же сайт на masterhost, если есть идеи в чем проблема на хостинге, подскажите, завтра буду звонить в поддержку, нужно это им как-то донести, чтобы пофиксили)
Основной же сайт на masterhost, если есть идеи в чем проблема на хостинге, подскажите, завтра буду звонить в поддержку, нужно это им как-то донести, чтобы пофиксили)
Не понятно в чем проблема на хостинге. Ты бы хотя бы консоль разработчика chrome открыл и посмотрел какие запросы и ответы идут при запуске скрипта.
Проблема была в mod_security, проверить включен ли он можно через
<?php
phpinfo();
?>
Если включен, то нужно попросить хостера выключить
php консоль в modx имеет свои секреты или это я не понимаю простых вещей?
Подскажите пожалуйста, почему код приведенный выше работает?
Мы задаем количество, задаем сдвиг. Делаем выборку чего либо, получаем массив объектов.
Иттерируемся по этим объектам, выполняем какую то логику.
Когда цикл завершился мы высчитываем новый сдвиг, дополнительно в цикле визуализируем «прогрессбар» НО что заставляет скрипт запустится снова? Почему происходит получение новых объектов и снова запускается цикл?
В моем понимании этот скрипт (конкретно тот что в заметке) должен отработать ровно 1 ресурс (поскольку step=1) и умереть.
Подскажите пожалуйста, почему код приведенный выше работает?
Мы задаем количество, задаем сдвиг. Делаем выборку чего либо, получаем массив объектов.
Иттерируемся по этим объектам, выполняем какую то логику.
Когда цикл завершился мы высчитываем новый сдвиг, дополнительно в цикле визуализируем «прогрессбар» НО что заставляет скрипт запустится снова? Почему происходит получение новых объектов и снова запускается цикл?
В моем понимании этот скрипт (конкретно тот что в заметке) должен отработать ровно 1 ресурс (поскольку step=1) и умереть.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.