Перезагрузка изображений товаров
Попросили перезалить изображения в магазине и так несколько раз. Потом коллега попросил пример скрипта на эту операцию. Выложу простой скрипт сюда, наверное кому-то ещё пригодиться.
Скрипт именно перезагружает изображения изображения, если у товара нет изображения — пропустит. Модифицировать легко — функция загрузки вынесена за пределы основной процедуры: чуть подправить «алгоритм» и вставить её запуск в нужное место…
В данном примере файлы изображений и сам скрипт лежат в папке /load/ в корне сайта. Файлы изображений называются по артикулу.
Запускать из консоли.
В данном примере файлы изображений и сам скрипт лежат в папке /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";
}
}
Поблагодарить автора
Отправить деньги