Быстро пересоздать превью продуктов с выбором дапазона через Console

Кого не устраивает скорость пересоздания превью для продуктов через утилиту минишопа и необходимо пересоздать превью не для всех продуктов предлагаю вариант кода
Рекомендую:
1. отключить «Показывать ошибки» в консоле перед исполнением кода
2. увеличить max_execution_time php сервера для большого объема изображений

Актуально для больших каталогов и фотогалерей
// $start $end - диапазон обрабатываемых товаров
// $end=0 - обрабатывает до конца списка

$start=0;
$end=0;
$q = $modx->newQuery('msProductFile', array('type' => 'image', 'parent' => 0));
$total = $modx->getCount('msProductFile',$q);
if ($end = 0) {$end = $total;}
$products = $modx->getIterator('msProduct', array('class_key' => 'msProduct'));
foreach ($products as $product) {
    if ($start <= $product->get('id') && $end <= $product->get('id')) {
        $d++;
        $files = $product->getMany('Files', array('parent' => 0));
        foreach ($files as $file) {
            $children = $file->getMany('Children');
            foreach ($children as $child) {
             $child->remove();
            }
            $file->generateThumbnails();
            /** @var msProductData $data */
            if ($file->get('rank') == 0 && $data = $product->getOne('Data')) {
                $thumb = $file->getFirstThumbnail();
                $data->set('thumb', $thumb['url']);
                $data->save();
            }
            $f++;
        }
    }
}
print "последняя обработанная директория: ".$product->get('id');
print '</br>всего обработано документов: '.$d;
print '</br>всего обработано изображений: '.$f;
print '</br>всего изображений у всех продуктов: '.$total;
SYAN
14 декабря 2023, 23:39
modx.pro
317
0

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

Артур Шевченко
14 декабря 2023, 23:41
0
Далеко не каждый хостер позволяет увеличивать max_execution_time
    SYAN
    15 декабря 2023, 00:09
    0
    Не смог разобраться, как удалять и генерировать по одному из ключей настроек источника файлов
    У меня два типа превью small и medium
    {
    "small":{"wp":150,"wl":150,"q":90,"f":"webp"},
    "medium":{"wp":350,"wl":350,"q":80,"f":"jpg"}
    }
    Если необходимо добавить еще один тип или изменить настройки одного из типов, то при выполнении данного кода удаляются все файлы превью обоих типов и пересоздаются заново
    $child->remove();
    generateThumbnails();
    Есть ли возможность пересоздать конкретный?
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2