Массовое редактирование товаров minishop (отредактировать опцию у товара)

Подскажите как можно отредактировать опцию у товара, через консоль? minishop2
Товаров свыше 2000, нужно массово изменить везде одну опцию (у всех будет одно значение)
Илья Александрович
04 марта 2021, 14:56
modx.pro
1
812
0

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

Артур Шевченко
04 марта 2021, 20:51
0
Самый простой вариант
$products = $modx->getIterator('msProduct', array('parent' => 24));
foreach($products as $product){
    $options = $product->getMany('Options');
    foreach($options as $option){
        if($option->get('key') == 'option_key'){
             $option->set('value', 1235);
        }
    }
    
};
    Илья Александрович
    04 марта 2021, 21:11
    0
    не работает, что то видать скрипт делает, но значение не меняет
    parent изменил на свой и option_key изменил на свой
      Артур Шевченко
      04 марта 2021, 21:30
      0
      Забыл $option->save();
      $products = $modx->getIterator('msProduct', array('parent' => 24));
      foreach($products as $product){
          $options = $product->getMany('Options');
          foreach($options as $option){
              if($option->get('key') == 'option_key'){
                   $option->set('value', 1235);
                  $option->save(); // тут
              }
          }
          
      };
Александр Мельник
04 марта 2021, 22:16
0
Наверное save нужно вызывать не у options а у product
    Артур Шевченко
    04 марта 2021, 22:18
    0
    Вам виднее)))
      Илья Александрович
      04 марта 2021, 22:24
      0
      $products = $modx->getIterator('msProduct', array('parent' => 61));
      foreach($products as $product){
          $options = $product->getMany('Options');
          foreach($options as $option){
              if($option->get('key') == 'quantity'){
                   $option->set('value', '1235');
                  $product->save(); // тут
              }
          }
          
      };
      $products = $modx->getIterator('msProduct', array('parent' => 61));
      foreach($products as $product){
          $options = $product->getMany('Options');
          foreach($options as $option){
              if($option->get('key') == 'quantity'){
                   $option->set('value', '1235');
                  
              }
          }
          $product->save(); // тут
      };
      так и так пробовал не помогает
        Артур Шевченко
        04 марта 2021, 22:34
        0
        $q = $modx->newQuery('msProductOption');
                    $q->command('UPDATE');
                    $q->where(array('key' => 'test'));
                    $q->set(array('value' => 3));
                    $q->prepare();
                    $q->stmt->execute();
        Проверил работает.
    Илья Александрович
    04 марта 2021, 23:41
    1
    0
    Вот рабочий вариант, только как сразу все категории перезаписать не получилось сделать, нужно менять parent
    <?php
    $products = $modx->getIterator('msProduct', array('parent' => 125));
    foreach($products as $product){
        $options = $product->getMany('Options');
        $options = array(
        	'quantity' => array('99999'),
        );
        $product->set('options', $options);
        $product->save();
    };
      Роман
      09 марта 2021, 14:10
      0
      mspre в помощь!
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        10