Перегенерировать все превью товаров 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»:
$result = file_get_contents($url, false, stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded;Cache-Control: no-cache, must-revalidate;Pragma: no-cache',
'content' => http_build_query($params)
)
)));
echo $result;
url — страница сайта со сниппетом скрипта
Скрипт выполняется, получаю 100%, но миниатюры не генерируются,
хотя при заходе на страницу со сниппетом через браузер все работает
с вашим скриптом (первым вариантом скрипта, не ms2Gallery) и запускает его.
Если захожу на эту страницу через браузер все работает,
а если через код указанный в моем предыдущем сообщении,
происходит вывод сообщения выполнено 100%(количество товаров),
но ничего не выполнено=/
Также при подключении стороннего php файла к ядру modx и запуске скрипта
уже в нем, происходит тоже самое, вывод сообщения 100%, но по факту ничего не выполнено.
В общем есть ли возможность запускать этот скрипт со стороны сервера?
Для меня это загадка… если бы скрипт не запускался, то не выводилось бы и сообщение
Ищу ответ, но не нахожу. (UPD. нашел ответ). Но назрел ещё один — никакие компоненты теперь не устанавливаются из modstore (
При генерации превью указывается определённое значение высоты и ширины. А есть ли возможность генерировать с фиксированной шириной, но высоту делать «пропорционально» исходнику? Это было бы полезно для вывода изображений для мобильных устройств (в роли главных изображений использовать такие превьюшки). Где можно посмотреть весь возможный синтаксис генерации?
UPD/ Вопрос отменяется. Нашел синтаксис в описании ms2gallery
Процесс выполнился, а превьюхи не поменялись.