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

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

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

Андрей
04 декабря 2017, 19:33
1
+1
Можно поставить дополнение 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
    0
    Спасибо! То что нужно.
      Александр
      08 декабря 2017, 04:52
      0
      Если товаров на удаление 5000? скрипт по 300 удаляет.
        Михаил
        08 декабря 2017, 07:12
        0
        Через крон запускать. Видать время кончается, хотя странно
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        4