Быстро пересоздать превью продуктов с выбором дапазона через Console
Кого не устраивает скорость пересоздания превью для продуктов через утилиту минишопа и необходимо пересоздать превью не для всех продуктов предлагаю вариант кода
Рекомендую:
1. отключить «Показывать ошибки» в консоле перед исполнением кода
2. увеличить max_execution_time php сервера для большого объема изображений
Актуально для больших каталогов и фотогалерей
Рекомендую:
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;
Комментарии: 2
Далеко не каждый хостер позволяет увеличивать max_execution_time
Не смог разобраться, как удалять и генерировать по одному из ключей настроек источника файлов
У меня два типа превью small и medium
У меня два типа превью small и medium
{
"small":{"wp":150,"wl":150,"q":90,"f":"webp"},
"medium":{"wp":350,"wl":350,"q":80,"f":"jpg"}
}
Если необходимо добавить еще один тип или изменить настройки одного из типов, то при выполнении данного кода удаляются все файлы превью обоих типов и пересоздаются заново$child->remove();
generateThumbnails();
Есть ли возможность пересоздать конкретный?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.