Перегенерировать все превью товаров miniShop2
10 сентября 2014, 11:09
<?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";
сэкономил несколько часов!!!
[0:13:26] Ustyuganskiy: ilyaut.ru/cheats/to-rebuild-all-previews-of-products/
С чем это может быть связано?
Это у меня первый удачный опыт, знакомство с php.
Работает верхний код в приложении — console, превью генерирует на ура!
Для новичков замечу, что перегенерировать превьюхи требуется после
изменения размеров превью и обрезки (кропинга, zc=0) в настройках источника файлов ms2images
Пж не обновляйте превью, если у вас много товаров с несколькими фотографиями.
Оно из последней фотке сделает превью, придется удалять и перезагружать все фото.
У меня все один товар с 4-мя фотографиями, повезло :)
Подскажите пожалуйста!
Хотел воспользоваться Вашим кодом для перегенерации превью в магазине Minishop2, но после запуска в консоли ничего не происходит. Если поменять в коде parent — на id каталога — то видно анимацию процесса, но сами превью не обновляются.
Подскажите — в чем может быть дело?
modx — 2.5.0
minishop2 — 2.4.4
Попробовал — теперь вижу что процесс остановился на 19% и выдаёт ошибки —
Видимо что-то у меня с хостингом — буду гуглить)
но в настройках указаны 148*68 и 470*390,
а в результате работы скрипта получились только 120*90
в чем может быть проблема?
в итоге просто прошелся ручками по всем товарам,
благо их в тесте не много
заранее спасибо.
ModX Revo 2.5.0 pl
Устанавливаю из админки, последняя версия 2.2.1, пробовал ставить вашу 2.0.2 не помогает тоже самое.
В настройках — меню она есть, но так не отображается сбросить кеш и т.д. пробовал ее нет. Также вопрос в записи к плагину ее запускают из components но у меня нет этого раздела, что можно сделать?
Для этого, вместо:
необходимо прописать:
Спасибо, Илья! Прекрасный скрипт! О таких возможностях Console узнал благодаря твоему скрипту. :)
Перегенерация заново сразу же выдаёт эту ошибку.
Переустановка минишопа ничего не даёт.
Куда копать?
Хостинг MODHOST.PRO, тариф Минимальный.
Что бы это могло быть?
1. Там более 2500 товаров, из которых около 700 были с неверным источником. Исправил это в базе.
2. Потом воспользовался консольным php-скриптом, и указывал конкретно категорию в коде и выполнял скрипт. И так для каждой категории.
Ошибки тоже вылезали, но в общем всё прошло успешно.
ms2gallery с пагинацией можно организовать так:
Не подскажите, как вывести подключение других размеров миниатюр и выводить их по клику?
Может что посоветуете как исправить? Заранее спасибо!
Илья, подскажите, как побороть?
на сайте настроена интеграция ms2Gallery с Minishop2
«big»: