mSync удаление старых картинок товаров
Доброго времени суток!
При выгрузке товаров на сайт из 1С через mSync новые картинки товаров загружаются в галерею, создаются превьюшки, но старые не удаляются. Видимо, так сделано на тот случай, если старые картинки нужны. Клиент же хочет, чтобы при наличии новых картинок для товара в выгрузке старые удалялись.
Написала плагин на событие mSyncOnPrepareProduct:
Решал ли кто-нибудь подобную задачу? Может ли кто-нибудь подсказать, где я ошиблась, и правильно ли вообще решать эту проблему таким путем?
Автор дополнения в отпуске, спросить у него не могу.
При выгрузке товаров на сайт из 1С через mSync новые картинки товаров загружаются в галерею, создаются превьюшки, но старые не удаляются. Видимо, так сделано на тот случай, если старые картинки нужны. Клиент же хочет, чтобы при наличии новых картинок для товара в выгрузке старые удалялись.
Написала плагин на событие mSyncOnPrepareProduct:
$eventName = $modx->event->name;
if ($eventName == 'mSyncOnPrepareProduct') {
if (!empty($data['images'])) {
$id = $properties['id'];
$images = $modx->getCollection('msProductFile', ['product_id' => $id]);
if (!empty($images)) {
foreach($images as $image) {
$image->remove();
}
}
}
}
В таблице событий mSync у этого события есть $data — новые полученные данные, и $properties — как я поняла, свойства товара, имеющиеся в данный момент. Но плагин не работает(. Похоже, что-то все-таки я делаю не так. Решал ли кто-нибудь подобную задачу? Может ли кто-нибудь подсказать, где я ошиблась, и правильно ли вообще решать эту проблему таким путем?
Автор дополнения в отпуске, спросить у него не могу.
Комментарии: 5
Добрый день. Ну вродь как все правильно. Нужно только проверить, что данное событие у этого плагина включено и дебажить. Я бы для начала посмотрел что из себя представляет $properties
Событие, конечно же, включено. Плагин срабатывает — из-за этого выгрузка обрывается, и все. Картинки не обновляются, в логах никаких ошибок нет. Видимо, просто что-то не правильно в плагине. В документации к mSync написано, что $properties — это свойства товара. Как поточнее посмотреть — понятия не имею( Код mSync довольно сложный, разбитый на множество файлов, так и не нашла в них, где это событие вызывается
Добрый день, Светлана, в итоге удалось решить задачу, подскажите каким образом?)
Хм, сейчас вспомню)
В файле core/components/msync/model/msync/msynccataloghandler.class.php на 1383 строчке добавила в событие mSyncOnPrepareProduct параметр — id товара, его там, вроде, не было:
На сайте с 10 000 товаров все работает. Только, если много товаров, сайт лучше разворачивать на модхосте, с хорошим запасом свободного места)
В файле core/components/msync/model/msync/msynccataloghandler.class.php на 1383 строчке добавила в событие mSyncOnPrepareProduct параметр — id товара, его там, вроде, не было:
$this->log("Вызвано событие mSyncOnPrepareProduct для товара с uuid={$productData['uuid']}", 1);
$response = $this->msync->invokeEvent('mSyncOnPrepareProduct', array(
'data' => $productData,
'parent' => $categoryId,
'properties' => $properties,
'custom_id' => $productId,
));
Затем плагин переписала так:$eventName = $modx->event->name;
if ($eventName == 'mSyncOnPrepareProduct') {
if (!empty($data['images']) && !empty($custom_id)) {
$id = (int) $custom_id;
$images = $modx->getCollection('msProductFile', ['product_id' => $id]);
if (!empty($images)) {
foreach($images as $image) {
$image->remove();
}
}
}
}
Проверяем, есть ли в полученных данных новые картинки у товара, и, если есть хотя бы одна, удаляем старые. Править исходники плохо, но пока получилось только так) Так что при обновлении компонента придется вставлять строчку заново.На сайте с 10 000 товаров все работает. Только, если много товаров, сайт лучше разворачивать на модхосте, с хорошим запасом свободного места)
Большое спасибо! Ваш ответ помог =)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.