Удалить все фото товара через API
Всем привет.
Простой вопрос поставил в тупик — как удалить через API все фото товара?
Я так понимаю такой процессор нужно запускать, но как туда переждать ID фоток зная ID товара?
Простой вопрос поставил в тупик — как удалить через API все фото товара?
Я так понимаю такой процессор нужно запускать, но как туда переждать ID фоток зная ID товара?
$response = $modx->runProcessor('components/minishop2/processors/mgr/gallery/multiple',array(
'method' => 'remove',
'ids' => '1291,1292',
));
Комментарии: 3
Вот такой код, но почему-то не работает(
на примере одного товара
на примере одного товара
<?php
$images = $modx->getCollection('msProductFile', array('type' => 'image', 'product_id' => 306, 'parent' => 0));
$ids = array();
foreach ($images as $image) {
$ids[] = $image->get('id');
}
$response = $modx->runProcessor('gallery/multiple',
array(
'method' => 'remove',
'ids' =>$ids,
),
array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/')
);
if ($response->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, "Error \"$v\": \n". print_r($response->getAllErrors(), 1));
}
else {
$modx->log(modX::LOG_LEVEL_INFO, "Successful \"$v\": \n". print_r($response->getObject(), 1));
}
print_r($response->response);
Проблема была в том, что $ids нужно отдавать процессору в JSON
Вот так работает, оставлю тут, может кому-то еще пригодится
Вот так работает, оставлю тут, может кому-то еще пригодится
<?php
$images = $modx->getCollection('msProductFile', array('type' => 'image', 'parent' => 0));
$ids = array();
foreach ($images as $image) {
$ids[] = $image->get('id');
}
$response = $modx->runProcessor('gallery/multiple',
array(
'method' => 'remove',
'ids' => json_encode($ids),
),
array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/')
);
if ($response->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, "Error \"$v\": \n". print_r($response->getAllErrors(), 1));
}
else {
$modx->log(modX::LOG_LEVEL_INFO, "Successful \"$v\": \n". print_r($response->getObject(), 1));
}
print_r($response->response);
Удалить изображения в базе
$q = $modx->newQuery('msProduct');
$q->innerJoin('msProductData', 'Data', 'msProduct.id = Data.id');
$q->where(array(
'msProduct.parent:IN' => [30396,30397,30398],
'msProduct.published' => 1,
'msProduct.deleted' => 0)
);
$q->sortby('msProduct.id','ASC');
$products = $modx->getIterator('msProduct', $q);
foreach ($products as $product) {
if ($images = $modx->getCollection('msProductFile', array('product_id' => $product->id, 'parent' => 0))) {
$ids = array();
foreach ($images as $im) {
$ids[] = $im->get('id');
}
$response = $modx->runProcessor('gallery/multiple',
array('method' => 'remove', 'ids' => json_encode($ids)),
array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/')
);
// remove files on dir
$remove_files = glob(MODX_BASE_PATH.'assets/images/products/'. $id.'/*');
foreach ($remove_files as $remove_file) {
if (is_file($remove_file)) {
unlink($remove_file); // delete file
}
}
}
}
Перегенерировать превью товара при загрузке после импорта$q = $modx->newQuery('msProduct');
$q->innerJoin('msProductData', 'Data', 'msProduct.id = Data.id');
$q->where(array('msProduct.parent:IN' => [30396,30397,30398],
'msProduct.published' => 1, 'msProduct.deleted' => 0));
$q->sortby('msProduct.id','ASC');
$products = $modx->getIterator('msProduct', $q);
$i = 0;
foreach ($products as $product) {
$i++;
if ($images = $modx->getCollection('msProductFile', array('product_id' => $product->id, 'parent' => 0, 'rank' => 0))) {
$ids = array();
foreach ($images as $im) {
$ids[] = $im->get('id');
$image = $im->get('url');
}
$response = $modx->runProcessor('gallery/multiple',
array('method' => 'generate', 'ids' => json_encode($ids)),
array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/')
);
$product = $modx->getObject('msProduct', $product->id);
$product->set('image', $image);
$product->save();
}
}
Номера родительских категорий следует сменить, смотрите внимательно. На всякий случай сделайте бэкап.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.