Фото товаров в MIniShop2

Товарищи, коллеги и иные представители родства с MODX.

Добрый день!..

Столкнулся с проблемой MiniShop2. Модуль крашнулся и единственным выходом его восстановление стало удаление и чистка кеша для повторной установки.

Всё заработало, но при этом все товары потеряли фотографии при том, что они физически есть на сервере и структура сохранена.

Можно, как-то, привязать эти фото к товарам без перезаливки в каждый товар?

Заранее спасибо если найдутся те-кто уже решил такую проблему.
Алексей
11 мая 2017, 12:47
modx.pro
1
1 734
-1

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

Дмитрий
11 мая 2017, 15:51
+1
Перенесите топик в раздел «Вопросы». Раздел «Сайты на MODX»о том, как кто-то что-то сделал, а не о том, как у кого-то что-то сломалось и надо это починить.
    Дмитрий
    11 мая 2017, 15:52
    0
    А по поводу вопроса — достаточно просто. Можете тупо пройтись по файлам и папкам скриптом, брать название папки как ID товара, и с помощью процессора загрузки картинок перезагрузить фото.
      Дмитрий
      11 мая 2017, 15:59
      1
      0
      Не знаю, насколько хорош код, как код, но работает. Делал пару месяцев назад. Комментарии по качеству кода — приветствуются.
      <?php
      
      //set_time_limit(00);
      define('MODX_API_MODE', true);
      require 'index.php';
      $basePath = getcwd();
      $modx->getService('error', 'error.modError');
      $modx->setLogLevel(modX::LOG_LEVEL_ERROR);
      $modx->setLogTarget(array
          (
          'target' => 'FILE',
          'options' => array
              (
              'filename' => 'gallery.' . strftime('%Y-%m-%dT%H:%M:%S')
              )
          )
      );
      
      chdir($basePath . '/assets/images/resources/');
      $folders = scandir(getcwd(),0);
      foreach ($folders as $folder) {
          if (($folder != '.') && ($folder != '..')) {
              if (is_dir($folder)) {
                  $catalog = getcwd() . '/' . $folder;
                  chdir($catalog);
                  $files = scandir(getcwd(),0);
                  foreach ($files as $file) {
                      if (is_dir($file) == FALSE) {
                          //для лога выведем все файлы и id ресурсов
                          //echo 'Грузим: ' . getcwd() . '/' . $file . ' ID ресурса: ' . $folder . '
      ';                    
                          $res = $modx->runProcessor('gallery/upload', array(
                              'file' => getcwd() . '/' . $file,
                              'id' => $folder
                                  ), array(
                              'processors_path' => MODX_CORE_PATH . 'components/ms2gallery/processors/mgr/'
                                  )
                          );
                          if ($res->isError()) {
                              print_r($res->getAllErrors());
                          } else {
                              print_r($res->getObject());
                          }
                      }
                  }
                  chdir(getcwd() . '/..');
              }
          }
      }
        Алексей
        11 мая 2017, 16:18
        +1
        Спасибо за совет, тему перенёс
          Дмитрий
          11 мая 2017, 16:28
          0
          Не за что) Два момента:
          1. Скрипт актуален для ms2Gallery, для стандартной галереи miniShop2, наверное, нужно будет что-нибудь подправить. Подозреваю, что путь к процессору. В любом случае, это можно найти в постах на этом ресурсе.
          2. Запускать скрипт нужно из консоли. Не из Console, не через браузер, а через SSH. Иначе скрипт по таймауту вылетит на 10-ом товаре (условно, конечно).
        Алексей
        11 мая 2017, 16:56
        0
        К сожалению код не помог. Изменил корневой путь до фото и строка 4 кода выводиться как ошибка в консоле.
          Алексей
          11 мая 2017, 16:57
          0
          ах. ну-да. Вы уточнили про ms2Gall
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          7