Наверх

Перегенерировать все превью товаров miniShop2

<?php
$step = 5;
$offset = isset($_SESSION['galgenoffset']) && $_SESSION['galgenoffset'] ? $_SESSION['galgenoffset'] : 0;
$miniShop2 = $modx->getService('minishop2');
$modx->setLogLevel(MODX_LOG_LEVEL_ERROR);
$q = $modx->newQuery('msProductFile', array('parent' => 0));
$total = $modx->getCount('msProductFile', $q);
$q->sortby('product_id', 'ASC');
$q->sortby('rank', 'DESC');
$q->limit($step,$offset);
$resources = $modx->getCollection('msProductFile', $q);
foreach ($resources as $resource) {
    $modx->runProcessor('mgr/gallery/generate', array('id' => $resource->id),
        array('processors_path' => $modx->getOption('core_path').'components/minishop2/processors/'));
}

$_SESSION['galgenoffset'] = $offset + $step;
if ($_SESSION['galgenoffset'] >= $total) {
  $sucsess = 100;
  $_SESSION['Console']['completed'] = true;
  unset($_SESSION['galgenoffset']);
} else {
  $sucsess = round($_SESSION['galgenoffset'] / $total, 2) * 100;
  $_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
    if ($i <= $sucsess) {
        print '=';
    } else {
        print '_';
    }
}
$current = $_SESSION['galgenoffset'] ?
           $_SESSION['galgenoffset'] :
           ($sucsess == 100 ? $total : 0);
print "\n";
print $sucsess.'% ('.$current.')'."\n\n";


ms2Gallery

<?php
$step = 5;
$offset = isset($_SESSION['galgenoffset']) && $_SESSION['galgenoffset'] ? $_SESSION['galgenoffset'] : 0;
$ms2Gallery = $modx->getService('ms2gallery', 'ms2Gallery', MODX_CORE_PATH . 'components/ms2gallery/model/ms2gallery/');
$modx->setLogLevel(MODX_LOG_LEVEL_ERROR);
$q = $modx->newQuery('msResourceFile', array('parent' => 0));
$total = $modx->getCount('msResourceFile', $q);
$q->sortby('resource_id', 'ASC');
$q->sortby('rank', 'DESC');
$q->limit($step,$offset);
$resources = $modx->getCollection('msResourceFile', $q);
foreach ($resources as $resource) {
    $modx->runProcessor('mgr/gallery/generate', array('id' => $resource->id),
        array('processors_path' => $modx->getOption('core_path').'components/ms2gallery/processors/'));
}

$_SESSION['galgenoffset'] = $offset + $step;
if ($_SESSION['galgenoffset'] >= $total) {
  $sucsess = 100;
  $_SESSION['Console']['completed'] = true;
  unset($_SESSION['galgenoffset']);
} else {
  $sucsess = round($_SESSION['galgenoffset'] / $total, 2) * 100;
  $_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
    if ($i <= $sucsess) {
        print '=';
    } else {
        print '_';
    }
}
$current = $_SESSION['galgenoffset'] ?
           $_SESSION['galgenoffset'] :
           ($sucsess == 100 ? $total : 0);
print "\n";
print $sucsess.'% ('.$current.')'."\n\n";


34 комментария

  1. Евгений 22 июня 2016, 04:29 # 0
    В новой версии ms2 сбивается порядок изображений, после перегенерации. Не сталкивался с таким?
    1. Илья Уткин 22 июня 2016, 10:29 # 0
      Привет! Неа, не сталкивался…
    2. Марк 14 августа 2016, 11:00 # 0
      Огромное спасибо!!!
      сэкономил несколько часов!!!
      1. Павел Александрович Устюгов 01 сентября 2016, 00:15 # 0
        [31.08.2016 21:46:51] Яна жiв4ik Вострякова: а никто на вскидку не даст ссылку на перегенерацию превью мсгалереи
        [0:13:26] Ustyuganskiy: ilyaut.ru/cheats/to-rebuild-all-previews-of-products/
        1. k-m-e 21 октября 2016, 16:25 # 0
          Илья, добрый день! У меня скрипт вот такие строки выдает:
          <h5>[2016-10-21 16:23:28] (ERROR @ /home/c/c00398/public_html/core/model/modx/modconnectorresponse.class.php : 145)</h5><pre>PHP warning: Cannot modify header information - headers already sent by (output started at /home/c/c00398/public_html/core/components/console/processors/exec.class.php(20) : eval()'d code:38)</pre>
          С чем это может быть связано?
          1. Илья Уткин 22 октября 2016, 14:18 # 0
            Привет! Не знаю, скорее всего ошибка где-то… На 38 строчке скрипта…
          2. Эникен Некиэн 02 ноября 2016, 17:25 # +1
            Илья, вечная тебе благодарность. Прям очень благодарен :)

            Это у меня первый удачный опыт, знакомство с php.

            Работает верхний код в приложении — console, превью генерирует на ура!

            Для новичков замечу, что перегенерировать превьюхи требуется после
            изменения размеров превью и обрезки (кропинга, zc=0) в настройках источника файлов ms2images
            1. Илья Уткин 02 ноября 2016, 17:49 # 0
              Верхний код для картинок товаров в miniShop, а нижний — для платной галереи ms2Gallery.
              1. Эникен Некиэн 02 ноября 2016, 18:02 # 0
                Да, я сам это понял, что меня обрадовало )

                Пж не обновляйте превью, если у вас много товаров с несколькими фотографиями.
                Оно из последней фотке сделает превью, придется удалять и перезагружать все фото.

                У меня все один товар с 4-мя фотографиями, повезло :)
            2. Сергей 08 ноября 2016, 08:35 # 0
              Илья добрый день!
              Подскажите пожалуйста!
              Хотел воспользоваться Вашим кодом для перегенерации превью в магазине Minishop2, но после запуска в консоли ничего не происходит. Если поменять в коде parent — на id каталога — то видно анимацию процесса, но сами превью не обновляются.
              Подскажите — в чем может быть дело?
              modx — 2.5.0
              minishop2 — 2.4.4
              1. Илья Уткин 08 ноября 2016, 08:43 # 0
                Попробуйте новую версию скрипта (обновил код в теме)
                1. Сергей 08 ноября 2016, 08:55 # 0
                  Спасибо за быстрый ответ)
                  Попробовал — теперь вижу что процесс остановился на 19% и выдаёт ошибки —
                  PHP warning: imageinterlace() expects parameter 1 to be resource, null given
                  Видимо что-то у меня с хостингом — буду гуглить)
              2. Михаил 15 декабря 2016, 15:16(Комментарий был изменён) # 0
                А как обновить превью если они не установлены? А в ms2Gallery есть картинки, т.е поставить превью из ms2Gallery первую.
                1. Илья Уткин 16 декабря 2016, 08:01 # 0
                  Для этого надо отдельный скрипт писать. Я с такой задачей не сталкивался.
                2. Михаил 16 декабря 2016, 12:48 # 0
                  Жаль очень часто с такой сталкиваюсь((( при парсинге или выгрузки через файл или 1с такая проблема существует
                  1. Борис Акименко 25 января 2017, 14:54 # 0
                    Илья, респект!
                    1. Сергей 24 февраля 2017, 17:03 # 0
                      В minishop2 превьюшки перегенирировались,
                      но в настройках указаны 148*68 и 470*390,
                      а в результате работы скрипта получились только 120*90
                      в чем может быть проблема?
                      1. Илья Уткин 27 февраля 2017, 15:42 # 0
                        Может быть неправильно указаны параметры источника файлов. При обычной загрузке новых картинок превьюшки генерируются?
                        1. Сергей 27 февраля 2017, 15:44 # 0
                          да, при обычной загрузке все ок,
                          в итоге просто прошелся ручками по всем товарам,
                          благо их в тесте не много
                      2. Александр 17 марта 2017, 21:33 # 0
                        Илья, столкнулся с такой проблемой, что при добавлении нового товара слетает источник файлов и фотки грузит система в корень, хотя в системных настройках все прописано. с чем это может быть связано?
                        1. Илья Уткин 20 марта 2017, 09:24 # 0
                          Не знаю… вроде, не сталкивался с таким…
                          1. Александр 20 марта 2017, 09:25(Комментарий был изменён) # 0
                            проблему заметил когда переезжал на хост. причем на старом все нормально работает, на новом нет. Уже и не знаю в какую сторону копать
                            1. Александр 20 марта 2017, 09:27 # 0
                              Илья, а вы могли бы посмотреть, если я вам доступы дам?

                              заранее спасибо.
                              1. Илья Уткин 20 марта 2017, 09:29 # 0
                                У меня сейчас на работе завал… попробуйте на modx.pro/work оставить объявление о работе — наверняка, кто-нибудь поможет
                          2. Кирилл 13 апреля 2017, 15:03(Комментарий был изменён) # 0
                            Вопрос такой не отображается консоль в меню, как ее можно запустить?
                            ModX Revo 2.5.0 pl
                            Устанавливаю из админки, последняя версия 2.2.1, пробовал ставить вашу 2.0.2 не помогает тоже самое.
                            В настройках — меню она есть, но так не отображается сбросить кеш и т.д. пробовал ее нет. Также вопрос в записи к плагину ее запускают из components но у меня нет этого раздела, что можно сделать?
                            1. Илья Уткин 21 апреля 2017, 08:11 # 0
                              Попробуйте своему пользователю поставить галочку «Неограниченные права»
                            2. Павел Гвоздь 17 июня 2017, 10:05 # 0
                              Есть небольшой косячок. Не знаю, с какой версии внедрено в ms2, но при клике на картинке «Обновить превьюшки» основной картинкой товара становится та картинка, на которой кликнули данное действие последний раз. Следовательно, когда мы перегенерируем превьюхи товара — сортировать надо в обратном порядке по полю rank, дабы первая картинка товара перегенерировалась последней и становилась основной картинкой товара.

                              Для этого, вместо:
                              $q->sortby('id','ASC');
                              необходимо прописать:
                              $q->sortby('product_id', 'ASC');
                              $q->sortby('rank', 'DESC');
                              Спасибо, Илья! Прекрасный скрипт! О таких возможностях Console узнал благодаря твоему скрипту. :)
                              1. Илья Уткин 17 июня 2017, 16:19 # 0
                                Спасибо за решение проблемы — тут уже отписывались, что порядок сбивается. Поправил в статье.
                              2. Василий Столейков 28 июня 2017, 16:54 # 0
                                Скрипт для минишопа сгенерировал процентов 20 и упал с следующей ошибкой:
                                Fatal error: Uncaught Error: Call to a member function removeObject() on null in /home/s10089/www/core/components/minishop2/model/minishop2/msproductfile.class.php:275 
                                Stack trace: 
                                #0 /home/s10089/www/core/components/minishop2/processors/mgr/gallery/generate.class.php(38): msProductFile->remove() 
                                #1 /home/s10089/www/core/model/modx/modprocessor.class.php(173): msProductFileGenerateProcessor->process() 
                                #2 /home/s10089/www/core/model/modx/modx.class.php(1706): modProcessor->run() 
                                #3 /home/s10089/www/core/components/console/processors/exec.class.php(24) : eval()'d code(14): modX->runProcessor('mgr/gallery/gen...', Array, Array) 
                                #4 /home/s10089/www/core/components/console/processors/exec.class.php(24): eval() 
                                #5 /home/s10089/www/core/model/modx/modprocessor.class.php(173): ConsoleExecProcessor->process() 
                                #6 /home/s10089/www/core/model/modx/modx.class.php(1706): modProcessor->run() 
                                #7 /home/s10089/www/core/model/modx/modconnectorresponse.class.php(140): modX->runProcessor('exec', Array, Array) 
                                #8 /home/s10089/www/core/model/mo in /home/s10089/www/core/components/minishop2/model/minishop2/msproductfile.class.php on line 275
                                
                                Перегенерация заново сразу же выдаёт эту ошибку.
                                Переустановка минишопа ничего не даёт.
                                Куда копать?
                                1. Василий Столейков 28 июня 2017, 17:04 # 0
                                  Запустил этот консольный php-скрипт и консоль мне выбила кучу таких ошибок:
                                  libpng warning: Ignoring incorrect cHRM value when sRGB is also present
                                  wx=0.345750, wy=0.358550, rx=0.648500, ry=0.330880
                                  gx=0.321210, gy=0.597870, bx=0.155890, by=0.066040
                                  libpng warning: Ignoring incorrect cHRM value when sRGB is also present
                                  wx=0.345750, wy=0.358550, rx=0.648500, ry=0.330880
                                  gx=0.321210, gy=0.597870, bx=0.155890, by=0.066040
                                  libpng warning: Ignoring incorrect cHRM value when sRGB is also present
                                  wx=0.345750, wy=0.358550, rx=0.648500, ry=0.330880
                                  gx=0.321210, gy=0.597870, bx=0.155890, by=0.066040
                                  
                                  Хостинг MODHOST.PRO, тариф Минимальный.
                                  Что бы это могло быть?
                                  1. Илья Уткин 28 июня 2017, 17:11 # 0
                                    Хм… не знаю… с таким не сталкивался
                                    1. Василий Столейков 29 июня 2017, 10:42 # 0
                                      Решил проблему поэтапно.

                                      1. Там более 2500 товаров, из которых около 700 были с неверным источником. Исправил это в базе.
                                      2. Потом воспользовался консольным php-скриптом, и указывал конкретно категорию в коде и выполнял скрипт. И так для каждой категории.

                                      Ошибки тоже вылезали, но в общем всё прошло успешно.
                                  2. Grigory Petin 12 июля 2017, 14:28 # 0
                                    Илья, плагина для копирования картинок при копировании ресурса у тебя, случаем, нет?
                                    1. Илья Уткин 13 июля 2017, 08:26 # 0
                                      Неа, пока не сталкивался с такой ситуацией.

                                    Авторизация

                                    через сервис Loginza:

                                    Подписка или RSS

                                    Буду присылать новые статьи — никакого спама



                                    Шаблоны MODX

                                    1 2 Дальше »

                                    Объектная
                                    модель
                                    MODX