Обновить все url у товаров
$docs = $modx->getCollection('msProduct');
foreach($docs as $doc){
$title = $doc->get('pagetitle') . '-' . $doc->get('id');
$alias = $doc->cleanAlias($title);
$doc->set('alias', $alias);
$modx->runProcessor('resource/update', $doc->toArray());
// $doc->set('alias', '');
// $doc->save();
}
сначала удалил все // $doc->set('alias', '');
// $doc->save();
потом запустил данный код и очень долго идет процесс обновления если прописать $modx->getCollection('msProduct',array('parent'=>3404));
то он обновит ссылки у нужной категории и выдает кучу таких ошибок[2016-07-27 10:15:02] (ERROR @ /home/s/spbsiayx/spbsiayx.bget.ru/public_html/core/model/modx/modcachemanager.class.php: 100)
Resource URI kategoriya-s-tovarami/semena-czvetov/balzamin-uollera-f1.html already exists for resource id = 3530; skipping duplicate resource URI for resource id = 5273
[2016-07-27 10:15:02] (ERROR @ /home/s/spbsiayx/spbsiayx.bget.ru/public_html/core/model/modx/modcachemanager.class.php: 100)
Resource URI kategoriya-s-tovarami/parniki-i-ukryivnyie-materialyi/.html already exists for resource id = 5156; skipping duplicate resource URI for resource id = 5495
[2016-07-27 10:15:02] (ERROR @ /home/s/spbsiayx/spbsiayx.bget.ru/public_html/core/model/modx/modcachemanager.class.php: 100)
Resource URI kategoriya-s-tovarami/parniki-i-ukryivnyie-materialyi/.html already exists for resource id = 5156; skipping duplicate resource URI for resource id = 5635
[2016-07-27 10:15:02] (ERROR @ /home/s/spbsiayx/spbsiayx.bget.ru/public_html/core/model/modx/modcachemanager.class.php: 100)
Resource URI kategoriya-s-tovarami/parniki-i-ukryivnyie-materialyi/.html already exists for resource id = 5156; skipping duplicate resource URI for resource id = 6421
[2016-07-27 10:15:02] (ERROR @ /home/s/spbsiayx/spbsiayx.bget.ru/public_html/core/model/modx/modcachemanager.class.php: 100)
Resource URI kategoriya-s-tovarami/semena-czvetov/odnoletnie/.html already exists for resource id = 3964; skipping duplicate resource URI for resource id = 4752
[2016-07-27 10:15:02] (ERROR @ /home/s/spbsiayx/spbsiayx.bget.ru/public_html/core/model/modx/modcachemanager.class.php: 100)
Resource URI kategoriya-s-tovarami/semena-czvetov/odnoletnie/.html already exists for resource id = 3964; skipping duplicate resource URI for resource id = 5646
я посмотрел по id эти товары не находятся в данной категории, но почему то выдает ошибку по ним.
Как избавится от ошибок и обновить ссылку у всех товаров?
Комментарии: 14
Вчитайся в ошибку Resource URI kategoriya-s-tovarami/semena-czvetov/odnoletnie/.html ты присваиваешь кривой алиас, из-за этого он у тебя и дублируется. И вместо getCollection —
$modx->getIterator();
Для экономии памяти. А для ускорения работы можно поиграться с$q->select();
Если будут проблемы с выборкой(CRC) modxclub.ru/topics/xpdoaddderivativecriteria-class-key-crc-i-prochie-svyazannyie-drug-s-drugom-tonkosti.html
Как я могу прописывать кривой алиас если он берется из тайтла не пойму? а у каждного абсолютно товара есть тайтл
почему ты просто не сохраняешь объект?
$doc->save();
А через процессор?
он его не сохраняет уже пробовал, в интернете почитал
modx.pro/help/2415/
modx.pro/help/5862/
вот эти темы говорят что надо через процессор и работает если указываю небольшую категорию где мало товаров, а все товары никак не могу обновить не знаю в чем дело в ошибки или в чем (
modx.pro/help/2415/
modx.pro/help/5862/
вот эти темы говорят что надо через процессор и работает если указываю небольшую категорию где мало товаров, а все товары никак не могу обновить не знаю в чем дело в ошибки или в чем (
вот что выдает один цикл этого кода
prntscr.com/by2iij
не могу понять я работаю только с одним товаром с айдишником 6630 дальше идет break; почему ошибки выдаются по товарам с другим айдишником?
prntscr.com/by2iij
не могу понять я работаю только с одним товаром с айдишником 6630 дальше идет break; почему ошибки выдаются по товарам с другим айдишником?
Как варианты: посмотреть response от работы процессора. И может быть, ты меняешь исправно, ошибки идут о других ресурсах, которые даже не участвуют? Ну, например: ты обновляешь для 1,2,3,4. А ошибки выбивает для 5 = 7, 6 =7. Собственно, нужно будет их и исправить потом
сейчас запустил такой код и он заработал
$docs = $modx->getCollection('msProduct');
foreach($docs as $doc){
$title = $doc->get('pagetitle') . '-' . $doc->get('id');
$alias = $doc->cleanAlias($title);
$doc->set('alias', $alias);;
$doc->save();
}
походе вы были правы можно и без процессора, почему у меня раньше так не получилось не могу понять, скрипт начал выполняться подожду результата
через какое то время выдал мне вот такое
prntscr.com/by2mse
вылечил удалив недавнюю историю браузера, но это не здоровая штука ((
prntscr.com/by2mse
вылечил удалив недавнюю историю браузера, но это не здоровая штука ((
ну дак вылетев из-за большого времени. Как я говорил можно через
$modx->getIterator()
. Если через твой вариант $q = $modx->newQuery('msProduct');
$q->limit('500','0'); //($limit,$offset)
$docs = $modx->getCollection('msProduct',$q);
Играйся с limit & offset. Делай частями
А вот с getIterator
$q = $modx->newQuery('msProduct');
$q->limit('500','0'); //($limit,$offset)
$modx->addDerivativeCriteria('msProduct', $q);//
$docs = $modx->getIterator('msProduct', $q);
После вылечивания проверил все ссылки все везде стоит и ошибок больше нет, спасибо вам за помощь!!!
Спасибо, друг, из 2019-го :)
из 2020-го ))))
У нас андройды в 2049 пытаются добится равноправия. Так что тоже спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.