Не получается снять товар с публикации при импорте в msync, как снять с публикации?
Пробовал на эти события подключаться mSyncOnPrepareProduct
Код выводит правильно то что я хочу, но не снимает с публикации.
Пытался не сохранять ресурс, и сохранять, всё равно не снимает с публикации.
Код выводит правильно то что я хочу, но не снимает с публикации.
if($data['properties']){
$props = json_decode($data['properties'], true);
if($props && $props['ВыгружатьНаСайт']){
$isUploadProduct = $props['ВыгружатьНаСайт'] == 'Да' ? 1: 0;
$properties['published'] = $isUploadProduct;
$data['published'] = $isUploadProduct;
}
}
mSyncOnProductImportПытался не сохранять ресурс, и сохранять, всё равно не снимает с публикации.
if($properties && $properties['ВыгружатьНаСайт']){
$isUploadProduct = $properties['ВыгружатьНаСайт'] == 'Да' ? 1: 0;
$resource->set('published', $isUploadProduct);
$resource->save();
}
Вот ещё одно событие mSyncOnBeforeImportProduct$data['published'] = $data['characteristics']['properties']['ВыгружатьНаСайт'] == 'Да' ? 1: 0;
$values['data'] = $data;
Комментарии: 5
Ни одно событие не снимает товар с публикации, при этом в каждом блоке кода если что-то выводить оно выводится.
На событие mSyncOnProductOffers можно снять с публикации, но там я не могу отловить мой флаг, так как он находится в файле импорта товаров, что я делаю не так?
Единственный рабочий обходной метод, это просто отловить поле мсинком как обычно, запихнуть в твшку, и потом на событие mSyncOnProductOffers обработать, остальные действительно подходящее для этого события просто не работают.
case 'mSyncOnProductOffers':
$isUploadOnSite = $resource->getTVValue('uploadToSite');
$isPublished = $resource->get('published');
$isPublish = 1;
if(($count == 0 || $count < 0) || ($isUploadOnSite == 'Нет' && $isPublished == 1)){
$isPublish = 0;
} elseif($isUploadOnSite == 'Да' && $isPublished == 0){
$isPublish = 1;
}
$resource->set('published', $isPublish);
$resource->save();
break;
У меня такой плагин работает на событие «mSyncOnProductImport»
<?php
/*
https://docs.modx.pro/components/msync/events-and-plugins
mSyncOnProductImport:
$mode: Строка "category" для категорий или "create" для новых товаров или "update" для обновления товара.
$resource: Объект msCategory или msProduct. Объект минишопа, созданный или обновленный в данный момент
$properties: array Массив свойств товара, извлеченных из XML, пустой для категории.
$data: Объект mSyncCategoryData или mSyncProductData. Объект привязки категории или товара 1С к объектам минишопа
*/
if ($modx->event->name != 'mSyncOnProductImport') return;
/*
Проверим, что свойство "Исключить из публикации на веб-сайтах" передано в выгрузке из 1С
(может и не быть). Если его нет значит данное свойство не поддерживается в базе 1С и
ничего не делаем. Если есть и это товар тогда делаем что надо.
*/
if ( is_a($resource, 'msProduct') ) {
if ( array_key_exists('Исключить из публикации на веб-сайтах', $properties) ) {
$hide = mb_strtoupper($properties['Исключить из публикации на веб-сайтах']) === mb_strtoupper('Да');
if ( !isset($mSync) ) {
$mSync = $modx->getService('msync', 'mSync', $modx->getOption('msync_core_path', null, $modx->getOption('core_path') . 'components/msync/') . 'model/msync/', array());
}
if ($hide) {
// Если параметр передан и имеет значение Да, скрываем номенклатуру:
$resource->set('deleted', 1);
$resource->set('deletedby', $mSync->config['user_id_import']);
$resource->set('deletedon', time());
$resource->save();
$mSync->log('Товар с идентификатором ' . $resource->get('id') . ' помечен удаленным.', 1);
} else {
// Если параметр передан и имеет другое значение, восстанавливаем номенклатуру:
if ($resource->get('deleted') == 1) {
$resource->set('deleted', 0);
$resource->save();
$mSync->log('Товар с идентификатором ' . $resource->get('id') . ' восстановлен из корзины.', 1);
}
}
}
}
Возможно у меня была проблема из-за того что в настройках мсинка установлена галка, чтобы публиковать в любом случае, и получается мои плагины на событие отрабатывают верно, но настройка мсинка отрабатывает позже, и перебивает друг друга, а на на импорте торговых предложений просто, отрабатывает как надо.
Но всё же как-то это событие должно лучше подходить «mSyncOnBeforeImportProduct» так как оно убирает доп сохранение ресурса, вместо условно двух, будет 1.
Но всё же как-то это событие должно лучше подходить «mSyncOnBeforeImportProduct» так как оно убирает доп сохранение ресурса, вместо условно двух, будет 1.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.