Новинка
Битрикс модуль «TS Умный экспорт товаров в торговые порталы»

TS Умный экспорт товаров в торговые порталы

Модуль выгружает товары и торговые предложения с определенной структурой в один xml-файл.
Модуль выгружает товары и торговые предложения с определенной структурой в один xml-файл.

Адрес до xml-файла указывается  в личном кабинете того сервиса, с которым вы работаете, он автоматически его загружает, обрабатывает и публикует товары, с вашей стороны требуется только своевременное обновление xml-файла на своем сайте.

Пока поддерживается два сервиса:

1) Яндекс.Маркет

- Упрощенный тип описания (simple)
- Произвольный тип описания (vendor.model)

2) Google Merchant
- Обновление онлайн-ассортимента (Online)
- Фид товаров (Products)

Модуль очень прост для освоения вашим разработчиком, вся обработка экспорта в одном файле, запускается экспорт во втором файле.
ТРЕБОВАНИЯ
- Битрикс 16+
- Битрикс D7
- PHP 5.5+
- Планировщик задач Cron на сервере
- Подходящие редакции: «Первый сайт», «Старт», «Стандарт», «Малый бизнес», «Эксперт», «Бизнес»   
- Поддерживается два типа товара:
1) TYPE_PRODUCT - Простой товар
2) TYPE_SKU - Товар с торговыми предложениями

УСТАНОВКА И НАСТРОЙКА
- Установка модуля обычная по кнопке "Попробовать".
- После установки перейдите в раздел Сервисы->TS Умный экспорт товаров в торговые порталы->Профили
- Нажмите зеленую кнопку "Добавить", профиль должен заполниться минимальными настройками по умолчанию, для тестирования вам достаточно будет задать: Активность, Цену, Валюту, Инфоблок.
Тип описания предложения (фида) и Поля также заполняются автоматически на минимальные, по умолчанию "Упрощенный тип описания (simple)"
- Далее нажимайте "Сохранить" и в списке профилей должен появиться новый, созданный вами профиль выгрузки.
- Далее остается настроить планировщик задач Cron на выполнение файла:
/bitrix/modules/api.export/tools/cron.php
Настраивается задача на сервере или хостинге, время запуска вам нужно подбирать свое, например, каждый час, каждый день, в определенное время и т.д.


Это все настройки, после запуска файла экспорта cron.php в папке
/bitrix/catalog_export
будут создаваться файлы экспорта
api_export_X.xml
где X - это айди (идентификатор) профиля.

Узнать http-путь до файла экспорта можно в настройках профиля на первой вкладке 1) Профиль
https://monosnap.com/file/Jxd3Tf0FryD2bsmpo0eiOpeykkTOZw.png

Там же будет записываться лог экспорта по каждому профилю, последние 30 файлов
/bitrix/catalog_export/api_export_log

НАСТРОЙКА ВКРАТЦЕ
1) Создать профиль выгрузки
На каждый портал нужно создавать отдельный профиль и у каждого портала будут разные типы описаний предложений, это тоже всё разные профили.
2) Только один раз нужно настроить планировщик задач Cron на выполнение файла, который в цикле поочередно запускает профили с учетом сортировки и активности, и только активные, далее вы будете работать только с профилями, все остальное будет делать сервер или хостинг запуская этот файл.


Примеры настроек планировщика задач Cron каждый час


Open Server
https://monosnap.com/file/SgME0GHwGhq1YjgZ7leemAkf0EaC3D.png

Время: 0 * * * *
Выполнить:
%progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\modules\php\%phpdriver%\php.ini -q -f %sitedir%\tuning-soft.os\bitrix\modules\api.export\tools\cron.php


ПУ VESTA
https://monosnap.com/file/LsMYjygacqCrVNyTKVfxcxfATjohTZ.png

Время: 0 * * * * 
Команда
/usr/bin/php -f ~/web/tuning-soft.os/public_html/bitrix/modules/api.export/tools/cron.php

ПУ ISP Manager на хостинге REG.RU
https://monosnap.com/file/lFRD0xieTbKg7lxFDqk3qJATbaP5WL.png

Период: Каждый час
Команда
/opt/php/5.6-bx-optimized/bin/php -c /var/www/u0999099/data/php-bin/php.ini -f /var/www/u0999099/data/www/tuning-soft.os/bitrix/modules/api.export/tools/cron.php
5.6-bx-optimized - это версия php на хостинге, если у вас другая версия, например 7.1, то везде вместо 5.6-bx-optimized пишите 7.1
u0999099  - Логин к панели управления хостингом

Чтобы не приходили всякие системные сообщения или ошибки после выполнения команд, можно:
а) либо поставить вот такую галку, как в панели ISP
не посылать отчёт по e-mail
б) либо дописать в конце команды через пробел вот это
 > /dev/null 2>&1

ИНФОРМАЦИЯ
Пока профиль выполняется, повторно он не запустится
Например, вы настроили экспорт на каждый час, через час крон заново запускает экспорт, а один какой-то профиль еще не закончил свою работу, тогда скрипт пропустит это профиль и пойдет выполнять другие.

В конструкторе полей <offer> можно использовать любые функции обработчики
В модуле есть возможность применять различные функции обработчики значений поля <offer>, встроенные в модуль, ваши собственные функции в init.php, встроенные в Битрикс и встроенные в php функции для работы со строками.

Доступные в модуле функции с префиксом fn_functionName:
fn_htmlspecialchars - пока не могу вспомнить зачем она, пробуйте лучше эту htmlspecialchars
fn_htmlToText - Конвертирует html в текст обрезая описание до 3000 символов, подойдет для форматирования описаний товаров.
fn_htmlToCDATA - Обернет html в тег <![CDATA[ обрезая описание до 3000 символов, это используется на Яндекс.Маркете, подойдет для форматирования описаний товаров.

Задаются в полях функции таким образом, пишется название функции без скобок
https://monosnap.com/file/InsucgmBuOPb5gxWTsutGp05oejc3D.png

Далее модуль ищет функцию сначала в своем классе, если ее там нет, проверяет существование ее вообще, есть нашел, то запускает таким образом:
$value = call_user_func_array($userFunc, array($value));
$userFunc - это сама функция, например: htmlspecialcharsbx
$value - это строковое значение поля, первый аргумент функции

Если не задана функция обработчик, то модуль по умолчанию обработает значение поля Битрикс функцией htmlspecialcharsbx()

Функции для обработки строк и текста в Битрикс
https://dev.1c-bitrix.ru/api_help/main/functions/string/index.php

Функции для обработки строк и текста в PHP
http://php.net/manual/ru/ref.strings.php

Возможно стоит сделать одну функцию обработчик по умолчанию, проверять ее существование, например, определенную вами в init.php где вы сами в зависимости от названия поля по условиям будете форматировать значения как захочется, если не определена, то применить свою с обработкой htmlspecialcharsbx, еще многое предстоит подумать и обкатать, если что, пишите.

Торговые предложения (характеристики) товара выгружаются как отдельные товары с уникальным айди.
Сам товар из экспорта удаляется, но объединяются свойства товара и ТП.
Например, у товара есть свойство "Производитель" с кодом "VENDOR", а у торговых предложений этого свойства нет, модуль объединит свойства товара со свойствами ТП таким образом
$arOffer['PROPERTIES'] = array_merge($arIitem['PROPERTIES'], $arOffer['PROPERTIES']);
В этом случае значение свойства товара VENDOR заданное в настройках полей профиля, также будет выгружаться с торговым предложением, значение будет браться у товара общее для всех ТП.
А вот если у ТП будет такое свойство, то оно заменит свойство родительского товара, т.е. в этом случае уже будет выгружаться свойство ТП.


В логах много полезной информации по экспорту
Пример: /bitrix/catalog_export/api_export_log
Профиль:    2
Процесс: 17964
Выделено памяти: 512M
Начало выгрузки: 25.06.2017 13:51:02
Шаг: 1 Элементов: 500 Память: 24 МБ Время, сек: 8.91
Шаг: 2 Элементов: 500 Память: 33 МБ Время, сек: 16.15
Шаг: 3 Элементов: 500 Память: 40 МБ Время, сек: 22.62
Шаг: 4 Элементов: 500 Память: 47 МБ Время, сек: 30.44
Шаг: 5 Элементов: 500 Память: 53 МБ Время, сек: 37.05
Шаг: 6 Элементов: 500 Память: 57 МБ Время, сек: 44.05
Шаг: 7 Элементов: 500 Память: 61 МБ Время, сек: 51.16
Шаг: 8 Элементов: 500 Память: 64 МБ Время, сек: 57.65
Шаг: 9 Элементов: 500 Память: 68 МБ Время, сек: 64.37
Шаг: 10 Элементов: 500 Память: 72 МБ Время, сек: 70.76
Шаг: 11 Элементов: 500 Память: 76 МБ Время, сек: 77.18
Шаг: 12 Элементов: 500 Память: 81 МБ Время, сек: 83.92
Шаг: 13 Элементов: 500 Память: 85 МБ Время, сек: 90.87
Шаг: 14 Элементов: 500 Память: 89 МБ Время, сек: 97.54
Шаг: 15 Элементов: 500 Память: 94 МБ Время, сек: 104.40
Шаг: 16 Элементов: 500 Память: 98 МБ Время, сек: 111.11
Шаг: 17 Элементов: 500 Память: 102 МБ Время, сек: 118.33
Шаг: 18 Элементов: 500 Память: 106 МБ Время, сек: 124.94
Шаг: 19 Элементов: 500 Память: 110 МБ Время, сек: 131.82
Шаг: 20 Элементов: 500 Память: 115 МБ Время, сек: 138.53
Шаг: 21 Элементов: 500 Память: 118 МБ Время, сек: 145.29
Шаг: 22 Элементов: 500 Память: 122 МБ Время, сек: 152.05
Шаг: 23 Элементов: 500 Память: 125 МБ Время, сек: 158.17
Шаг: 24 Элементов: 500 Память: 129 МБ Время, сек: 164.45
Шаг: 25 Элементов: 500 Память: 133 МБ Время, сек: 170.83
Шаг: 26 Элементов: 500 Память: 137 МБ Время, сек: 177.13
Шаг: 27 Элементов: 500 Память: 142 МБ Время, сек: 182.91
Шаг: 28 Элементов: 500 Память: 146 МБ Время, сек: 189.20
Шаг: 29 Элементов: 500 Память: 150 МБ Время, сек: 195.26
Шаг: 30 Элементов: 500 Память: 154 МБ Время, сек: 201.47
Шаг: 31 Элементов: 500 Память: 157 МБ Время, сек: 207.11
Шаг: 32 Элементов: 500 Память: 161 МБ Время, сек: 213.41
Шаг: 33 Элементов: 500 Память: 165 МБ Время, сек: 219.47
Шаг: 34 Элементов: 500 Память: 168 МБ Время, сек: 225.18
Шаг: 35 Элементов: 500 Память: 171 МБ Время, сек: 231.22
Шаг: 36 Элементов: 500 Память: 173 МБ Время, сек: 237.40
Шаг: 37 Элементов: 16 Память: 173 МБ Время, сек: 237.66
Конец выгрузки: 25.06.2017 13:54:59
Обновлено всего: 18016
Время выполнения, сек: 237.68
Использовано памяти: 168 МБ

Технические данные

Опубликован:
11.07.2017
Обновлен:
14.07.2017
Версия:
1.1.0
Установок:
Менее 50
Битрикс:
Первый сайт, Старт, Стандарт, Малый бизнес, Эксперт, Бизнес
Адаптивность:
Да
Композит:
Да

История версий

Версия 1.1.0
[+] Добавлена возможность подключать пользовательский обработчик доставок профиля в файле delivery.php
Файл необходимо создать в одной из папок, на ваш выбор:
/local/php_interface/include/api.export/delivery.php
/bitrix/php_interface/include/api.export/delivery.php

Скачать пример обработчика можно здесь:
https://tuning-soft.ru/upload/marketplace/delivery.zip
Версия 1.0.1
[x] Если указана функция обработчик значения поля, то встроенная обработка поля функцией htmlspecialcharsbx() отключится, в вашей функции будут доступны исходные данные поля или свойства
Установка модуля