удаление списка товаров miniShop2 по артиклу
Подскажите как реализовать удаление списка товаров miniShop2 по артиклу?
База постоянно обновляется, старые товары нужно удалять, накопилось более 1000 товаров на удаление.
База постоянно обновляется, старые товары нужно удалять, накопилось более 1000 товаров на удаление.
Комментарии: 4
Можно поставить дополнение Console и выполнить там код.
Есть несколько вариантов:
1. Получить все ресурсы по артикулу и отметить как удаленные или сразу удалить
2. Так же получить по артикулу и удалить через процессор (то же самое что удалить из админки)
Есть несколько вариантов:
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, 'Не удалось удалить ресурс');
}
}
}
Спасибо! То что нужно.
Если товаров на удаление 5000? скрипт по 300 удаляет.
Через крон запускать. Видать время кончается, хотя странно
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.