Удалить первое фото из галереи minishop2 всех твоаров

Здравствуйте. Как удалить первое фото у всех товаров магазина на minishop2?
Спасибо
Ivan
07 августа 2018, 15:21
202
0

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

Денис
07 августа 2018, 16:37
+1
Как то так. Только сделайте прежде бекапы файлов и бд. Код выполняется в console.

if (!$ms2 = $modx->getService('minishop2')) return;
$step = 5;
if (!isset($_SESSION['Console']['completed'])) {
    $_SESSION['console_offset'] = 0;
}
$offset = isset($_SESSION['console_offset']) && $_SESSION['console_offset'] ? $_SESSION['console_offset'] : 0;

$q = $modx->newQuery('msProductData');
$total = $modx->getCount('msProductData', $q);
$q->limit($step, $offset);

$resources = $modx->getIterator('msProductData', $q);
foreach ($resources as $productData) {
    
	$c = $modx->newQuery('msProductFile');
	$c->where(array(
		'parent' => 0
	));
	$c->sortby('rank','asc');
	if($files = $productData->getMany('Files',$c)){
		$firstFile = reset($files);
		$response = $modx->runProcessor('mgr/gallery/remove',
			                        array('id' => $firstFile->id),
			                        array('processors_path' => $ms2->config['corePath'] . 'processors/') );
		if($response->isError()){
			echo $response->getMessage(), PHP_EOL;
		}
	}
	
}

$_SESSION['console_offset'] = $offset + $step;
if ($_SESSION['console_offset'] >= $total) {
  $sucsess = 100;
  $_SESSION['Console']['completed'] = true;
} else {
  $sucsess = round($_SESSION['console_offset'] / $total, 2) * 100;
  $_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
    if ($i <= $sucsess) {
        print '=';
    } else {
        print '_';
    }
}
print "\n";
print $sucsess.'% ('.$_SESSION['console_offset'].')'."\n\n";
    Ivan
    09 августа 2018, 12:16
    0
    Большое спасибо. Сегодня попробую и отпишусь сюда
    Ivan
    09 августа 2018, 20:30
    0
    Вроде работает. Спасибо еще раз)