Массовое редактирование tv
Возникла необходимость отредактировать 4 tv у 50 000 ресурсов.
Пытаюсь через console сделать так:
Пробовал вместо
Может кто-нибудь знает лучший способ редактирования?
Пытаюсь через console сделать так:
<?php
$pages = $modx->getIterator('modResource', ['parent:IN' => [8888]]);
foreach ($pages as $p) {
$alias = $p->getTVValue('tv_name_1');
$alias = str_replace('value_1','value_2',$alias);
$p->setTVValue('tv_name_1', $alias);
$p->save();
}
Всего у каждого ресурса по 4 таких tv. То есть для каждой родительской категории такой код через console приходится запускать по 4 раза, что является далеко не лучшим решением.Пробовал вместо
['parent:IN' => [8888]]
использовать ['template:IN' => [8]]
, но ресурсов 50 000 и все зависает.Может кто-нибудь знает лучший способ редактирования?
Комментарии: 4
Ну во первых, можно сделать скрипт который будет работать в ssh сессии и там нет ограничений на время выполнения.
Во вторых, console умеет выполнять код много раз. Как здесь ilyaut.ru/cheats/to-rebuild-all-previews-of-products/
В смысле, ставите limit и offset в запрос. offset пишете в сессию и читаете его из нее.
Во вторых, console умеет выполнять код много раз. Как здесь ilyaut.ru/cheats/to-rebuild-all-previews-of-products/
В смысле, ставите limit и offset в запрос. offset пишете в сессию и читаете его из нее.
$_SESSION['Console']['completed'] = false;
показывает console, что код нужно повторить.
Попробуйте просто sql
Префикс к таблицам добавьте и id tv
Ну и протестируйте не на боевом сервере
$q= "UPDATE `site_tmplvar_contentvalues` SET `value` = REPLACE(`value`, 'value_1', 'value_2') WHERE `tmplvarid` = ID_TV AND `contentid` IN (SELECT `id` FROM site_content WHERE parent = 8888)";
$q = $modx->prepare($q);
$q->execute();
Либо это запрос напрямую в каком-нибудь phpmyadminПрефикс к таблицам добавьте и id tv
Ну и протестируйте не на боевом сервере
Спасибо! Но там внутри
parent = 8888
еще 3 уровня родителей.
$q= «UPDATE `site_tmplvar_contentvalues` SET `value` = REPLACE(`value`, 'value_1', 'value_2') WHERE `tmplvarid` = ID_TV AND `contentid` IN (SELECT `id` FROM site_content WHERE template= 8)»;
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.