Как поменять тип ресурса у всех ресурсов внутри каталога?

Вышло что в некоторые каталоги попали товары с типом ресурса — Документ, а для манипуляций с ними необходим тип msProduct

Искал, но нигде не смог найти как менять тип ресурса с помощью сниппета или вообще каким либо методом

Подскажите пожалуйста реализуемо ли это и если да то как?
Марк
06 сентября 2019, 23:16
modx.pro
963
0

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

Баха Волков
07 сентября 2019, 10:09
0
Поставьте компонент Console и сделайте выборку и меняйте всё что нужно
    Марк
    07 сентября 2019, 13:05
    0
    Вот мой код, которым я пытался прописать всем дочерним элементам тип ресурса msProduct

    $array_ids = $modx->getChildIds(12);
    
    foreach($array_ids as $id){
      $product = $modx->getObject('modResource', $id);
      $product->set('class_key', 'msProduct');
      $product->save();
    }
    Где 12 — id родителя

    Но он просто заканчивается сразу же.
    Не могу найти где прошляпился
      iWatchYouFromAfar
      07 сентября 2019, 14:52
      +1
      $child = $modx->getChildIds(12, 10, array('context' => 'web'));
      $q = $modx->newQuery('modResource');
      $q->where(array(
          'id:IN' => $child,
          'published' => true,
          'deleted' => false,
          'searchable' => true,
      ));
      
      $products = $modx->getIterator('modResource', $q);
      
      foreach ($products as $k => $product) {
          $product->set('class_key', 'msProduct');
          $product->save();
      }
        Марк
        07 сентября 2019, 15:01
        0
        Получилось!
        Долго ломал голову и вы сильно мне помогли, большое спасибо за помощь =)
        Баха Волков
        07 сентября 2019, 22:42
        0
        Не могу найти где прошляпился
        Если не можете найти то где вы прошляпились, то это значит, что вы не там ищете, дебажте. Ошибка у вас скорее всего была в том, что метод getChildIds ищет в текущем контексте, а раз вы запускали его в mgr, то и он искал ресурсы в контексте mgr и конечно же не находил, об это пишется в документации

        Note that when using this method in the manager (to collect input options for a TV for example), you need to define the context with the third options parameter as it defaults to the current context (in that scenario the manager).
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5