Обновить все 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 эти товары не находятся в данной категории, но почему то выдает ошибку по ним.
Как избавится от ошибок и обновить ссылку у всех товаров?
stas
27 июля 2016, 07:17
modx.pro
1
3 540
0

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

Захарий
27 июля 2016, 11:02
0
Вчитайся в ошибку 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
    stas
    27 июля 2016, 11:07
    0
    Как я могу прописывать кривой алиас если он берется из тайтла не пойму? а у каждного абсолютно товара есть тайтл
      Захарий
      27 июля 2016, 11:13
      0
      почему ты просто не сохраняешь объект?
      $doc->save();
      А через процессор?
        stas
        27 июля 2016, 11:16
        0
        он его не сохраняет уже пробовал, в интернете почитал
        modx.pro/help/2415/
        modx.pro/help/5862/
        вот эти темы говорят что надо через процессор и работает если указываю небольшую категорию где мало товаров, а все товары никак не могу обновить не знаю в чем дело в ошибки или в чем (
          stas
          27 июля 2016, 11:25
          0
          вот что выдает один цикл этого кода
          prntscr.com/by2iij
          не могу понять я работаю только с одним товаром с айдишником 6630 дальше идет break; почему ошибки выдаются по товарам с другим айдишником?
            Захарий
            27 июля 2016, 11:29
            0
            Как варианты: посмотреть response от работы процессора. И может быть, ты меняешь исправно, ошибки идут о других ресурсах, которые даже не участвуют? Ну, например: ты обновляешь для 1,2,3,4. А ошибки выбивает для 5 = 7, 6 =7. Собственно, нужно будет их и исправить потом
              stas
              27 июля 2016, 11:32
              0
              сейчас запустил такой код и он заработал

              $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();
              }
              походе вы были правы можно и без процессора, почему у меня раньше так не получилось не могу понять, скрипт начал выполняться подожду результата
                stas
                27 июля 2016, 11:36
                0
                через какое то время выдал мне вот такое
                prntscr.com/by2mse
                вылечил удалив недавнюю историю браузера, но это не здоровая штука ((
                  Захарий
                  27 июля 2016, 11:41
                  1
                  +1
                  ну дак вылетев из-за большого времени. Как я говорил можно через
                  $modx->getIterator()
                  . Если через твой вариант
                  $q = $modx->newQuery('msProduct');
                  $q->limit('500','0'); //($limit,$offset)
                  $docs = $modx->getCollection('msProduct',$q);
                  Играйся с limit & offset. Делай частями
                    Захарий
                    27 июля 2016, 11:48
                    +1
                    А вот с getIterator
                    $q = $modx->newQuery('msProduct');
                    $q->limit('500','0'); //($limit,$offset)
                    $modx->addDerivativeCriteria('msProduct', $q);// 
                    $docs = $modx->getIterator('msProduct', $q);
                      stas
                      27 июля 2016, 11:51
                      0
                      После вылечивания проверил все ссылки все везде стоит и ошибок больше нет, спасибо вам за помощь!!!
                        Мартин Очоа
                        04 сентября 2019, 00:36
                        0
                        Спасибо, друг, из 2019-го :)
                          Илья
                          26 марта 2020, 09:24
                          0
                          из 2020-го ))))
                            Denis
                            03 сентября 2020, 10:15
                            0
                            У нас андройды в 2049 пытаются добится равноправия. Так что тоже спасибо.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            14