К содержанию

удаление списка товаров miniShop2 по артиклу

Подскажите как реализовать удаление списка товаров miniShop2 по артиклу?
База постоянно обновляется, старые товары нужно удалять, накопилось более 1000 товаров на удаление.
Александр
Александр
04 декабря 2017, 06:21
modx.pro
2 739
Реклама

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

Андрей
Андрей Старожил
04 декабря 2017, 19:33
Можно поставить дополнение Console и выполнить там код.

Есть несколько вариантов:

1. Получить все ресурсы по артикулу и отметить как удаленные или сразу удалить
$articles = array('артикул1', 'артикул2');

$c = $modx->newQuery('msProduct');
$c->leftJoin('msProductData', 'Data');
$c->where(array(
  'Data.article:IN' => $articles
));

$products = $modx->getCollection('msProduct', $c);

foreach ($products as $product) {
  // 1. Отметить как удаленные
  $product->set('deleted', '1');
  $product->save();

  // 2. Удалить сразу
  // $product->remove(); 
}

2. Так же получить по артикулу и удалить через процессор (то же самое что удалить из админки)
$articles = array('артикул1', 'артикул2');
$products = array();

$c = $modx->newQuery('msProduct');
$c->leftJoin('msProductData', 'Data');
$c->where(array(
  'Data.article:IN' => $articles
));
$c->select(array(
  'msProduct.id as id'
));

if ($c->prepare() && $c->stmt->execute()) {
  $products = $c->stmt->fetchAll(PDO::FETCH_ASSOC);
}

if (!empty($products)) {
  foreach($products as $product) {
    $response = $modx->runProcessor('resource/delete', array(
      'id' => $product['id']
    ));
    
    if ($response->isError()) {
      $modx->log(1, 'Не удалось удалить ресурс');
    }
  }
}
    Александр
    Александр Старожил
    05 декабря 2017, 04:46
    Спасибо! То что нужно.
      Александр
      Александр Старожил
      08 декабря 2017, 04:52
      Если товаров на удаление 5000? скрипт по 300 удаляет.
        Михаил
        Михаил Эксперт
        08 декабря 2017, 07:12
        Через крон запускать. Видать время кончается, хотя странно
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        4