[mSync] Вопрос по выгрузке товаров
Добрый день!
У нас на сайте реализована выгрузка из 1С с последующим отключением (выставлением deleted в 0) товаров, которых не было в выгрузке. Реализовано это так:
Заранее спасибо за помощь!
У нас на сайте реализована выгрузка из 1С с последующим отключением (выставлением deleted в 0) товаров, которых не было в выгрузке. Реализовано это так:
$q = $this->modx->newQuery('modResource');
$q->select($this->modx->getSelectColumns('modResource', 'modResource', '', array('id')));
$q->where(['class_key' => 'msProduct']);
if ($q->prepare() && $q->stmt->execute()) {
$data = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
$uploadedProducts = array_column($data, 'id');
}
if($uploadedProducts) {
$result = array_diff($uploadedProducts, $_SESSION['product_mapping']);
$this->modx->log(modX::LOG_LEVEL_ERROR, '[mSklad] Внимание! Будут деактивированы товары с ID: ' . json_encode($result));
$this->modx->exec("UPDATE {$this->modx->getTableName('modResource')} SET `deleted` = 1 where `id` in (" . implode(',', $result) . ")");
}Тестирование выявило, что некоторые товары, присутствующие в выгрузке, отсутствуют в массиве $_SESSION['product_mapping'] и следовательно попадают в массив $result на удаление. Как я понимаю, $_SESSION['product_mapping'] должен содержать id всех получаемых из выгрузки товаров? Почему тогда некоторых товаров в этом массиве нет?Заранее спасибо за помощь!
Комментарии: 1
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Я не разбирался в сессиях компонента, если честно. Но у mSync есть событие mSyncAfterImport, по которому принимается массив выгруженных товаров: новых и обновленных. На мой взгляд, проще написать плагин на это событие, в котором будут прилетать выгруженные товары. И потом их сравнить с существующими на сайте.
Вот пример плагина, который публикует товары, которые были в выгрузке (перед импортом весь каталог снимается с публикации, но это в другом плагине):
Чутка доработать его и всё норм будет)