Для того чтобы синхронизировать два магазина нам надо установить модуль UniXML на оба.
Далее на доноре нам надо настроить выгрузку для сайта приемника (акцептора). Рекомендуется создать новый фид и взять структуру выгрузки rozetka.
настраиваем все данные. Изначально заменяем все данные для нового сайта, например название сайта или любая принадлежность до донора меняется на сайт акцептора. Задача настроить выходные данные чтобы они были подготовлены под импорт товара.
В пункте 3.12 добавляем дополнительные данные для переноса, например: <sku> <meta_h1> <meta_title> <meta_description> <meta_keyword> <stock_status_id> и другие данные которые нужно синхронизировать.
Если вам надо передавать все категории товара в пункте 4.3 делаем добавление их в фид
$category_query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product['product_original_id'] . "' ORDER BY main_category ASC");
foreach($category_query->rows as $cat){
$product['attributes_full'][] = array(
'name' => 'categoryId',
'text' => $cat['category_id'],
'end' => 'categoryId'
);
}
Если вам надо добавить и группы атрибутов в пункте 4.2 ставим
$data['attributes_with_group'] = true;
Если у вам надо передать опции и желательно в оригинале тогда в пункте 4.3 добавляем
foreach($product['option_data'] as $option_value_id => $option_value_data){}
$oquery = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value WHERE product_id = " . $product['product_original_id'] . " AND option_value_id = " . $option_value_id);
$product['price'] = $oquery->row['price'];
$product['attributes_full'][] = array(
'name' => 'price_prefix',
'text' => $oquery->row['price_prefix'],
'end' => 'price_prefix',
);
$product['attributes_full'][] = array(
'name' => 'option_weight',
'text' => $oquery->row['weight'],
'end' => 'option_weight',
);
$product['attributes_full'][] = array(
'name' => 'is_default',
'text' => $oquery->row['is_default'],
'end' => 'is_default',
);
$product['attributes_full'][] = array(
'name' => 'quantity_original',
'text' => $product['quantity_original'],
'end' => 'quantity_original',
);
$product['attributes_full'][] = array(
'name' => 'price_original',
'text' => $product['price_original'],
'end' => 'price_original',
);
После этого у нас в фиде будут идти опции 1в1 как на доноре.
Если категории на акцепторе отличаются от донора тогда в пункте 3.7 делаем нужные соответствия категорий.
Если надо на двух и более языках сделать синхронизацию тогда после всех настроек делаем копию фида и выбираем соответствующий язык.
После того как все настроено на доноре переходим на акцептор.
Добавляем импорт - ставим первую главную ссылку и добавляем для других языков. Делаем настройки для всех данных - какие теги за что отвечают. Посмотреть их можно в сформированном фиде с донора.
В пункте Дополнительные данные с фида в любые поля делает соответствующие приставки что куда грузим.
Если вам надо передавать в оригинале ЧПУ товаров (заранее подготовьте их в фиде с донора) и в пункте Кастомный код до импорта поставьте
$data['custom_url'] = 'url';
также в пункте ниже поставьте
$product['url'] = (string)$row->url;
Если у вас идет передача атрибутов с учетом групп в пункте Кастомный код при обходе товара добавьте
$product['attributes'] = array();
foreach($row->param as $param){
$attr_data = $this->importGetXmlDataAttribute($param);
$product['attributes'][] = array(
'name' => $attr_data['name'],
'value' => (string)$param,
'group' => $attr_data['group'],
);
}
Если вам надо загружать в количество товара оригинальное количество а не сумму опций в пункте Кастомный код до импорта поставьте
$data['quantity_original'] = true;
Если вы загружаете опции в оригинале или же дополнительные поля для опций в пункте Кастомный код до импорта поставьте
$data['option_data'] = array( 'price_prefix' => 'price_prefix', 'price' => 'price', 'quantity' => 'quantity_in_stock', 'weight' => 'option_weight', 'is_default' => 'is_default' );
Если вам надо обновлять стикеры от шаблона octemtlates в этом же пункте добавьте
$data['oct_stickers'] = '';
if((string)$row->oct_stickers){
$data['oct_stickers'] = unserialize((string)$row->oct_stickers);
$data['oct_stickers'] = $this->db->escape(serialize($data['oct_stickers']));
}
$this->db->query("UPDATE " . DB_PREFIX . "product SET oct_stickers = '" . $data['oct_stickers'] . "' WHERE product_id = '" . (int)$product['product_id'] . "'");
Если вам надо в импортируемых товарах поставить какой-то id статуса товара когда у него нет остатка в пункте Кастомный код при обходе товара поставьте
$product['stock_status_id'] = 10;
$data['fields_p']['stock_status_id'] = 'stock_status_id';
Если нужно загрузить минимальное количество товара с текста из тега sales_notes в пункте Кастомный код при обходе товара
$product['upc'] = preg_replace("/[^0-9]/", '', $row->sales_notes);
if(!$product['upc']){
$product['upc'] = 1;
}
$data['fields_p']['upc'] = 'upc';
Пунктом ниже добавьте
$this->db->query("UPDATE " . DB_PREFIX . "product SET minimum = upc");
$this->db->query("UPDATE " . DB_PREFIX . "product SET upc = ''");
Если вам надо загрузить идентификаторы offer в поле location в пункте Кастомный код при обходе товара добавьте
$product['location'] = $product['link_xml'];
$data['fields_p']['location'] = 'location';
Ниже код в пункте Кастомный код при обходе товара добавляет опции знак = и оригинал цены в опцию а также в кастомное поле location таблицы product_option_value добавляет offer id
$data['option_data'] = array(
'location' => $product['link_xml'],
'prefix' => '=',
'price' => (string)$row->price,
);
Если после импорта надо например полю sku задать значение id товара - id импорта можно в пункте Кастомный код после импорта добавить
$this->db->query("UPDATE " . DB_PREFIX . "product SET model = CONCAT(product_id, '-', unixml_feed) WHERE unixml_feed = '" . $data['import_id'] . "'");