Кастомный код при обходе товара

Кастомный код позволяет сделать импорт максимально гибким. Применяя 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
  );
}
Для уникализации ключа например по модели можно добавить приставку поставщика, например kr_
$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; }
и тогда как в фиде будет модель 540 а в магазине будет kr_540 и все будет обновлять. Только надо выключить функцию "Не добавлять новые товары"

Если вам нужно для новых товаров загрузить в какую-то определенную категорию достаточно поставить строку

$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(
  '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 - это кастомные поле, но если оно будет тут то будет обновляться.   Если в массиве чего-то нет то не добавляет и не обновляет. 

Если вам надо импортировать атрибуты с группами (в фиде в 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;
}
Как видим кастомный код это возможность гибкой настройки импорта практически для любой ситуации
×
Информация только для UniXML 7.x
Модуль не работает в рф и работать не будет

Разработчик модуля - Прут Николай.

Работаю с opencart c 2010 года.

Создал успешные модули UniXML Pro, MicrodataPro, Easyphoto, Редиректор 301 и другие.

Авторское право на модуль UniXML и информацию на этом сайте принадлежит Прут Николаю.

Копирование материала или использования нелицензионного модуля запрещено.