Обновить 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? Спасибо Комментарии: 2
Пишите в файл номер запуска, при запуске скрипта считывайте, как только $docs будет пустой (как вариант, количество меньше 200) — в файл пишите 0 и так по кругу, ваш offset будет номер запуска*200.
Чтобы снизить нагрузкуИспользуйте PDO вместо xPDO. Если вам значение именно в 1 надо — два запроса — select — получить id ресурсов с нужными шаблонами, update — обновить значение. А если этот тв используется только у этих шаблонов, так и id ресурсов получать не обязательно.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.