Часто возникает ситуация, когда на всем интернет магазине, сделанном на базе minishop2, поменялся формат изображений у превью. Либо пришлось сделать изменения в настройках «Медиа» в разрешении превьюшек.
Чтобы превью на сайте отображалось корректно — нужно зайти в нужный товар в админпанели, далее зайти во вкладку «Галерея» и выбрать пункт «обновить все». Это становится неудобно если товаров с изображениями очень много на сайте.
Для этого нам поможет скрипт, который нужно выполнить просто в консоли. Изменять в скрипте ничего не нужно — просто выполните его в консоли. Конечно, желательно выполнить это на тестовой версии сайта, чтобы убедиться что код сделает именно то, что вам нужно.
<?php
$step = 5;
$offset = isset($_SESSION['wsu_offset']) && $_SESSION['wsu_offset'] ? $_SESSION['wsu_offset'] : 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['wsu_offset'] = $offset + $step;
if ($_SESSION['wsu_offset'] >= $total) {
$success = 100;
$_SESSION['Console']['completed'] = true;
unset($_SESSION['wsu_offset']);
} else {
$success = round($_SESSION['wsu_offset'] / $total, 2) * 100;
$_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
if ($i <= $success) {
print '=';
} else {
print '_';
}
}
$current = $_SESSION['wsu_offset'] ?
$_SESSION['wsu_offset'] :
($success == 100 ? $total : 0);
print "\n";
print $success.'% ('.$current.')'."\n\n";