Кастомный код позволяет сделать импорт максимально гибким. Применяя php код можно модифицировать импорт как вам будет удобно и нужно.
И многое другое. Все задачи тяжело перечислить из-за их возможного разнообразия.
Полезная подсказка. Для того чтобы понимать с чем работаете рекомендую сделать print_r нужных данных. Смотреть рекомендуется через Ссылка запуска по CRON внизу окна слева. Эту ссылку откройте в браузере для отладки.
Подробнее ниже.
Например чтобы посмотреть массив товара достаточно прописать код
echo "<pre>";
print_r($product);
exit();
Для просмотра конфигурации и самого XML код
echo "<pre>";
print_r($data);
exit();
Для просмотра объекта XML с текущим товаром
echo "<pre>";
print_r($row);
exit();
Загрузка кастомного тега в кастомное поле.
Например нам надо из тега <big_opt_price> загрузить цену закупки в поле zakupka таблицы product.
Для начала в кастомном коде сделает выборку из XML нужных нам данных в нужный ключ массива товара.
$product['zakupka'] = $this->importGetXmlData($row, 'big_opt_price');
Далее достаточно добавить еще строку
$data['fields_p']['zakupka'] = 'zakupka';
Где в массив $data['fields_p'] добавляем ключ zakupka со значением zakupka.
Здесь работает так $data['fields_p']['поле в таблице product'] = 'ключ в массиве $product';
Если надо добавить в таблицу product_description добавляем в $data['fields_pd']
Загрузка ключевых слов keywords в meta_keywords
$product['meta_keyword'] = $this->importGetXmlData($row, 'keywords');
$data['fields_pd']['meta_keyword'] = 'meta_keyword';
Загрузка country_of_origin в атрибут Страна производитель
$country = $this->importGetXmlData($row, 'country_of_origin');
if($country){
$product['attributes'][] = array(
'name' => 'Страна производитель',
'value' => $country
);
}
Фильтрация товара по запрещенным категориям
$stop_category = array(
307,308,309,310,
311,312,344,361,255,256,258,
259,380,381,350,351,354,355,
356,357,358,378,379,396,367,
);
if(in_array((int)$product['category_id'], $stop_category)){
$product['continue'] = true;
}
Фильтрация товара по наличию. То есть не загружать то чего нет в наличии
$product['continue'] = false;
if($product['quantity'] == 'false'){
$product['continue'] = true;
}
Для загрузки нестандартных атрибутов (в нестандартном виде) (для информации как можно тк уже такой формат атрибутов модуль загружает через настройки)
например
<properties>
<property>
<property_name>Торговая марка</property_name>
<property_value>YES</property_value>
</property>
<property>
<property_name>Тип</property_name>
<property_value>Тетрадь премиум</property_value>
</property>
</properties>
достаточно добавить код
$product['attributes'] = array();
foreach($row->properties->property as $attr){
$name = trim((string)$attr->property_name);
$value = trim((string)$attr->property_value);
$product['attributes'][] = array(
'name' => $name,
'value' => $value
);
}
$product['model'] = 'kr_' . $product['model'];
if(isset($data['products'][$product['model']])){ $data['status'] = 'update'; //обновляем $product['product_id'] = $data['products'][$product['model']]; } if(isset($data['fieldset']['products']['nadd_value']) && $data['status'] == 'add'){ $product['continue'] = true; }
Если вам нужно для новых товаров загрузить в какую-то определенную категорию достаточно поставить строку
$product['custom_category_id'] = 435;
где 435 - id категории в магазине
Если не надо обновлять категорию для конкретного товара можно поставить строку
$product['category_save'] = true;
Если надо включать товар который был выключен но уже в наличии нужно добавить
$this->importSetProductQuantity($data, $product);
if($product['product_id'] != $product['product_xml_id'] && $product['quantity']){
$product['status'] = 1;
$data['fields_p']['status'] = 'status';
}
Если вам надо загрузить в опции оригинальные значения можно поставить
$data['option_data'] = array(
'price_prefix' => (string)$row->price_prefix,
'price' => (string)$row->price,
'quantity' => (string)$row->quantity_in_stock,
'weight' => (string)$row->option_weight,
'is_default' => (string)$row->is_default,
);
тут выше можно в опции добавлять/обновлять любые данные. Например is_default - это кастомные поле, но если оно будет тут то будет обновляться. Если в массиве чего-то нет то не добавляет и не обновляет. Можно добавлять в значение тег из XML, массив товара или же само значение.
Если вам надо импортировать атрибуты с группами (в фиде в param будет атрибут group с группой атрибута) достаточно добавить код
$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'],
);
}
Фильтрация товара
Например если в теге <pod_zakaz> будет значение 1 (ситуации могут быть разные)
Для этого надо взять данные с этого тега строкой и сделать проверку. Если там 1 тогда присваиваем товару ключ continue и он будет игнорироваться импортом вообще.
$pod_zakaz = $this->importGetXmlData($row, 'pod_zakaz');
if((int)$pod_zakaz == 1){
$product['continue'] = true;
}Чтобы загрузить товары только из сопоставленных категорий надо добавить код
if(!isset($data['acats'])){
$data['acats'] = [];
foreach($data['replace_category'] as $catxml => $catoc){
if($catoc[0] != 0){
$catxml = explode('-', $catxml);
$data['acats'][] = $catxml[0];
}
}
}
if(!in_array($product['category_id'][0], $data['acats'])){
$product['continue'] = true;
}Как видим кастомный код это возможность гибкой настройки импорта практически для любой ситуации