Переиндексация TV на сайте (обновить TV массово)
Доброе утро.
Как переиндексисровать TV параметр на всем сайте?
TV1 — цена в долларах
TV2 — цена в рублях
В системных настройках — вбивается курс с учетом всех надбавок
Плагин берет TV1 и умножает на курс, округляет до десятков и пишет в TV2 (OnDocFormSave).
На сайте показывается TV2
Сегодня изменили курс и надо все ресурсы открыть, обновить TV2.
Как это сделать массово, не открывая каждый ресурс в отдельности?
Как переиндексисровать TV параметр на всем сайте?
TV1 — цена в долларах
TV2 — цена в рублях
В системных настройках — вбивается курс с учетом всех надбавок
Плагин берет TV1 и умножает на курс, округляет до десятков и пишет в TV2 (OnDocFormSave).
На сайте показывается TV2
Сегодня изменили курс и надо все ресурсы открыть, обновить TV2.
Как это сделать массово, не открывая каждый ресурс в отдельности?
Комментарии: 11
Установить 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) {
$modx->runProcessor('resource/update', $resource->toArray());
}
// Меняем offset
$_SESSION['console_offset'] = $offset + $step;
if ($_SESSION['console_offset'] >= $total) {
$sucsess = 100;
$_SESSION['Console']['completed'] = true;
} 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 '_';
}
}
print "\n";
print $sucsess.'% ('.$_SESSION['console_offset'].')'."\n\n";
Спасибо. То что надо…
Спасибо за красивое решение пошагового выполнения скрипта!
У меня, кстати, есть еще код отправки писем для Sendex: https://ilyaut.ru/cheats/step-by-step-the-script-in-console/
Круто! Этого мне не хватало — скрипты постоянно вываливались из-за таймаута…
Кстати, в customExtra можно указать в настройке customextra_items_snippet имя сниппета, и появится кнопка, по нажатию на которую этот сниппет будет выполняться пошагово.
Да, я думал об этом уже… У меня сейчас задача импорта больше 500 тысяч заявок (тикетов) — тут нужен отдельный скрипт. Хочу использовать в нём пошаговость и запустить из консоли.
Еще одно «Кстати» =)
Вот описание этого функционала: https://ilyaut.ru/repost/console-2-0-4-beta-cyclic-queries-in-the-console-modx/
Вот описание этого функционала: https://ilyaut.ru/repost/console-2-0-4-beta-cyclic-queries-in-the-console-modx/
Спасибо! Как это я пропустил…
Вообще, это крайне неэффективный способ. Достаточно одной базовой цены, например, в долларах. Задали курс и на сайте выводить цену в долларах * курс. И ничего пересчитывать не нужно, цена в рублях формируется не лету.
Переиндексация цен за 5 лет, на моей памяти, была 2 раза.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.