Кастомний код дозволяє зробити імпорт максимально гнучким. Застосовуючи 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;
}Як бачимо, кастомний код — це можливість гнучкого налаштування імпорту практично для будь-якої ситуації