Удалить все фото товара через API

Всем привет.
Простой вопрос поставил в тупик — как удалить через API все фото товара?
Я так понимаю такой процессор нужно запускать, но как туда переждать ID фоток зная ID товара?
$response = $modx->runProcessor('components/minishop2/processors/mgr/gallery/multiple',array(
		'method' => 'remove',
		'ids' => '1291,1292',
	));
Андрей
13 июня 2019, 11:38
modx.pro
2
1 646
0

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

Андрей
13 июня 2019, 12:01
0
Вот такой код, но почему-то не работает(
на примере одного товара
<?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);
    Андрей
    13 июня 2019, 12:10
    1
    0
    Проблема была в том, что $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);
      Кровельный
      24 ноября 2023, 15:57
      0
      Удалить изображения в базе
      $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();
          }
      }
      Номера родительских категорий следует сменить, смотрите внимательно. На всякий случай сделайте бэкап.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        3