Обновить TV-поле

Салют. Возникла необходимость по крону обновлять тв-поле у всех ресурсов, шаблон которых id5 и id6. Чтобы снизить нагрузку, использую limit,offset
$q = $modx->newQuery('modResource');
$q->where(array(
    'template:IN' => [5,6]
));
$q->select(array(
   'modResource.*'
));
$q->limit('200', '0');   
$q->sortby('id', 'DESC');
$q->prepare();

$docs = $modx->getCollection('modResource', $q);
foreach ($docs as $k => $resource) {
  $value = 1;
  $resource->setTVValue('tvname', $value );
  $resource->save();
}
Все ок, но обновляются только первые 200 ресурсов. Как правильно запустить скрипт по кругу, увеличивая каждый раз offset на 200? Спасибо
Николаевич
05 февраля 2017, 15:59
modx.pro
1 360
0

Комментарии: 2

Андрей Коробков
05 февраля 2017, 19:25
0
Пишите в файл номер запуска, при запуске скрипта считывайте, как только $docs будет пустой (как вариант, количество меньше 200) — в файл пишите 0 и так по кругу, ваш offset будет номер запуска*200.

Чтобы снизить нагрузку
Используйте PDO вместо xPDO. Если вам значение именно в 1 надо — два запроса — select — получить id ресурсов с нужными шаблонами, update — обновить значение. А если этот тв используется только у этих шаблонов, так и id ресурсов получать не обязательно.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2