Перезагрузка изображений товаров

Попросили перезалить изображения в магазине и так несколько раз. Потом коллега попросил пример скрипта на эту операцию. Выложу простой скрипт сюда, наверное кому-то ещё пригодиться.
Скрипт именно перезагружает изображения изображения, если у товара нет изображения — пропустит. Модифицировать легко — функция загрузки вынесена за пределы основной процедуры: чуть подправить «алгоритм» и вставить её запуск в нужное место…

В данном примере файлы изображений и сам скрипт лежат в папке /load/ в корне сайта. Файлы изображений называются по артикулу.

Запускать из консоли.

<?php
define('MODX_API_MODE', true);
define('ROOT', dirname(dirname(__FILE__)));
require ROOT.'/index.php';

# debug - true для вывода хода операции
$debug = false;
$dir = ROOT.'/load/';
$core_path = $modx->getOption('core_path');

#$where = array( 'id' => 2214); # для теста на одном продукте
$where = array('class_key' => 'msProduct', 'parent' => 2213); 

$products = $modx->getIterator('msProduct', $where);

$count = 0;
foreach ($products as $product) {
    $message = '';
    $article = $product->get('article');
    $id = $product->get('id');
	
    $file = $dir.$article.'.jpg';	
    if(file_exists($file)) {
	$message .= "Process: ".$article." -> ".$file."\n";	
	$files = $product->getMany('Files', array('parent' => 0));
	foreach ($files as $item) {
	    $modx->error->reset();
	    $response = $modx->runProcessor('gallery/remove',
                array('id' => $item->get('id')),
	        array('processors_path' => $core_path.'components/minishop2/processors/mgr/')
	    );
	    if ($response->isError()) {
		#print_r($response->getAllErrors());
		$message .= "Error removing master image: ".$item->get('id')."\n";
	    }
	    else {
		$message .= "Master image removed: ".$item->get('id')."\n";
	    }
	}	
        $loadData = array('core_path'=>$core_path,'id'=>$id,'article'=>$article,'file'=>$file);
        $message .= loadImage($loadData);
        unlink($file);
    }
    else {
	$message .= "File not exists: ".$article." -> ".$file.". Product = ".$data['id']."\n";
    }
	
    if($debug) echo $message;
    $count++;
}

echo $count."\n\n";

function loadImage($data) {
    global $modx;
    $response = $modx->runProcessor('gallery/upload',
	array('id' => $data['id'], 'name' => $data['article'], 'file' => $data['file']),
	array('processors_path' => $data['core_path'].'components/minishop2/processors/mgr/')
    );
    if ($response->isError()) {
	return "Error load image. Product = ".$data['id']."\n";
    }
    else {
        return "New images created. Product = ".$data['id']."\n";
    }
}
Алексей Шумаев
30 августа 2018, 18:48
modx.pro
11
1 764
+9
Поблагодарить автора Отправить деньги

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0