Перенос фото товаров из TV в галерею miniShop2

Постановка задачи: был интернет магазин, где товары — обычные ресурсы, а изображения — TV поля (в моем примере 5 штук). Необходимо сделать товары типа msProduct, а изображения перенести в стандартную галерею miniShop2.

Небольшой скрипт, решающий вторую часть задачи, ниже. (первая часть задачи решается примерно так)

Что он делает? Скрипт берет все записи с типом msProduct, и копирует изображения из TV в галерею miniShop2.

Надеюсь кому-нибудь будет полезным (скрипт не 100% универсальный, подгоняйте под себя! и да, я запускаю его из Console, если у вас просто php файл, то необходимо сначала авторизоваться в админке через API).
<?php

// увеличиваем время выполнения скрипта
set_time_limit(3600);

// путь к изображениям в TV
$path = MODX_BASE_PATH;
$products = $modx->getCollection('msProduct');

foreach($products as $product) {
  
  // устанавливаем корректный источник файлов
  $product->set('source', 2);
  $product->save();
  
  // список TV, в которых прописаны картинки
  $tvs = array('image','image2','image3','image4','image5');
  foreach($tvs as $tv) {
    $image = trim($product->getTVValue($tv));
    if(!empty($image)) {
      $image = $path.$image;
      if(file_exists($image)) {
        // запускаем процессор
        $response = $modx->runProcessor('gallery/upload',
					array('id' => $product->get('id'), 'name' => basename($image), 'file' => $image),
					array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/')
				);
				if ($response->isError()) {
					echo "Error on upload \"$image\": \n". print_r($response->getAllErrors(), 1);
				}
				else {
					echo "Successful upload  \"$image\": \n". print_r($response->getObject(), 1);
				}
				echo '<br />';
					
      }
    }
  }
}
Наумов Алексей
03 февраля 2016, 12:05
modx.pro
11
3 873
+5

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

Василий Столейков
04 февраля 2016, 09:05
0
Спасибо, полезный скрипт!
    Василий Столейков
    04 февраля 2016, 09:19
    0
    А к Тикетам интересно как прикрутить? Как решить ту же задачу, но с переносом картинок из тв-шек в тикет-файлы?
      Александр
      04 февраля 2016, 19:48
      1
      +1
      В теории немного правок и можно к Тикетам прикрутить

      $response = $modx->runProcessor('file/upload .... array('processors_path' => MODX_CORE_PATH.'components/tickets/processors/web/')
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3