Выгрузка каталога из 1С в интернет-магазин
Содержание
Процесс обмена
1С инициализирует запуск файла
ваш_домен/app/addons/rus_exim_1c/exim_1c.php
.1С формирует и передает файлы с данными о товарах в папку
ваш_домен/var/files/код_компании/exim/1C_ТекущаяДата
вашего интернет-магазина.Например:
www.site.ru/var/files/код_компании/exim/1С_06062014
1С выгружает в интернет-магазин файлы:
Тип данных Название файла Расположение файла Данные товаров import.xml /var/files/код_компании/exim/1C_ТекущаяДата/import.xml
Цены товаров offers.xml /var/files/код_компании/exim/1C_ТекущаяДата/offers.xml
Изображения номенклатуры *.jpg
,*.jpеg
,*.PNG
/var/files/код_компании/exim/1C_ТекущаяДата/import_files/
1С отправляет запрос на обработку
import.xml
.- Обрабатывается и сохраняется в базу данных основная информация о товарах.
- Изображения прикрепляются к товарам и копируются в папку
/images
.
1С запускает обработку
offers.xml
.На данном шаге обновляются:
- Цены
- Остатки
- Характеристики
Финиш!
Идентификация (соответствие) данных между 1С и CS-Cart производится:
С помощью тега
<Ид>
(в файле 1С) иexternal_id
(в базе данных CS-Cart).Примечание
Ид == external_id
По наименованию (при поиске категорий и характеристик в базе данных Multi-Vendor).
Обработка на стороне интернет-магазина
Обработку данных на стороне интернет-магазина выполняют файлы модуля “Обмен данными с 1С”.
ваш_домен/app/addons/rus_exim_1c/exim_1c.php |
обрабатывает запросы от 1С и подключает функции для обработки |
ваш_домен/app/addons/rus_exim_1c/func.php |
содержит функции обработки и загрузки данных. |
Авторизация и загрузка файлов
Загрузка файлов import.xml
и offers.xml
начинается с того, что система “1С:Предприятие” отправляет запрос:
ваш_домен/app/addons/rus_exim_1c/exim_1c.php?type=catalog&mode=checkauth
Параметры type
и mode
определяют какой код будет выполнен.
Выполняется авторизация и интернет-магазин передает системе “1С:Предприятие”:
success
- означающая успешность соединения.- Имя Cookie.
- Значение Cookie.
Примечание
Дальнейшие запросы к интернет-магазину со стороны “1С:Предприятия” будут содержать имя и значение Cookie. Обработка файлов происходит последовательно.
Обработка import.xml
1C отправляет в интернет-магазин запрос, для начала обработки import.xml
:
ваш_домен/app/addons/rus_exim_1c/exim_1c.php?type=catalog&mode=import&filename=import.xml
Выполняется пошаговая загрузка данных:
- Категорий - функция
fn_exim_1c_import_categories
- Свойства товара - функция
fn_exim_1c_collect_features
- Товары - функция
fn_exim_1c_import_products
Обработка offers.xml
После обработки файла import.xml
, осуществляется обработка файла offers.xml
, по запросу со стороны 1С:
ваш_домен/app/addons/rus_exim_1c/exim_1c.php?type=catalog&mode=import&filename=offers.xml
Обработка данных из файла offers.xml
производится с помощью функции fn_exim_1c_import_offers
файла func.php.
Результат
В случае успешной загрузки данных 1С передает строку со словом success
. Если что то пошло не так, то 1С передаст failure
.
Если возникла ошибка
Проверьте правильность ввода логина и пароля.
Проверьте содержит ли папка
ваш_домен/var/files/код_компании/exim/1С_ТекущаяДата
файлыimport.xml
иoffers.xml
.Проверьте имя папки
1С_ТекущаяДата
.ТекущаяДата
должна соответствовать текущей дате.Попробуйте очистить файлы cookie.
Описание ошибки передается в журнал выгрузки 1С.
После обмена сформированные файлы с данными из 1С сохранятся в папке: ваш_домен/var/files/код_компании/exim/1С_ТекущаяДата
Пример модификации
Если в процессе работы с модулем необходимо внести какие-либо изменения или добавить новые функции, то все изменения вносятся в файлы папки /app/addons/rus_exim_1c/
.
Задача
Добавить настройку, которая позволит выбрать параметр из файла import.xml
. Параметр будет добавлен в поле товара “Название страницы”.
Варианты настройки:
- Не импортировать - означает, что при загрузке файлов в поле “Название страницы” данные записываться не будут.
- Наименование - означает, что при загрузке файлов в поле “Название страницы” будет записываться данные файла import.xml тега
<Наименование>
. - Полное наименование - означает, что при загрузке файлов в поле “Название страницы” будет записываться данные файла import.xml тега
<Описание>
.
Решение
Откройте файл
/app/addons/rus_exim_1c/addon.xml
.В открывшийся файл добавьте код настройки, позволяющая выбрать значение записываемое в поле товара “Название страницы”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
<item id="exim_1c_page_title"> <type>radiogroup</type> <name>Использовать в названии страницы</name> <translations> <item lang="en">Use in the page name</item> </translations> <default_value>not_import</default_value> <variants> <item id="not_import"> <name>Не импортировать</name> <translations> <item lang="en">Do not import</item> </translations> </item> <item id="name"> <name>Наименование</name> <translations> <item lang="en">Name</item> </translations> </item> <item id="full_name"> <name>Полное наименование</name> <translations> <item lang="en">Full name</item> </translations> </item> </variants> </item>
Для записи значения в поле товара “Название страницы” откройте файл
/app/addons/rus_exim_1c/func.php
.Найдите функцию
fn_exim_1c_import_products
в файлеfunc.php
(функция вызывается из файла exim_1c.php).1 2 3 4 5 6 7 8 9 10 11 12
<?php if ($fileinfo['filename'] == 'import') { if (Registry::get('addons.rus_exim_1c.exim_1c_export_check_prices') != 'Y') { if (isset($xml->Классификатор)) { fn_exim_1c_import_categories($xml->Классификатор, 0, $user_data['user_type']); fn_exim_1c_collect_features($xml->Классификатор); } if (isset($xml->Каталог)) { fn_exim_1c_import_products($xml->Каталог, $user_data); } } }
Найдите цикл перебора товаров и добавьте код для записи значения в поле товара “Название страницы”, в зависимости от выбранной настройки “Использовать в названии страницы” модуля “Экспорт, импорт 1С”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
<?php function fn_exim_1c_import_products($xml, $user_data) { if (isset($xml->Товары->Товар)) { if (Registry::isExist('rus_exim_1c.options_1c')) { Registry::set('rus_exim_1c.options_1c', array()); } $_cat = Registry::get('rus_exim_1c.categories_1c'); $products_1C = array(); $lang_code = CART_LANGUAGE; foreach ($xml->Товары->Товар as $_product) { if (empty($_product->Наименование) || empty($_product->Группы->Ид)) { continue; } $product = array(); $ids = fn_explode('#', $_product->Ид); $guid_product = array_shift($ids); $guid_variant = (!empty($ids)) ? array_shift($ids) : ''; if (Registry::get('addons.rus_exim_1c.exim_1c_page_title') == 'name') { $product['page_title'] = trim($_product->Наименование, " -"); } if (Registry::get('addons.rus_exim_1c.exim_1c_page_title') == 'full_name') { $product['page_title'] = trim($_product->Наименование, " -"); foreach ($_product->ЗначенияРеквизитов->ЗначениеРеквизита as $reckvizit) { if (strval($reckvizit->Наименование) == 'Полное наименование') { $product['page_title'] = trim(strval($reckvizit->Значение), " -"); } } } } } }
Для просмотра значений переменных и массивов используйте функцию fn_print_r($array). Функция выведет в браузер значения переменных и массивов в удобном виде. В функцию можно передавать несколько переменных и массивов через запятую.
Примечание
Обращение к тегам осуществляется через переменную $xml->ИмяТега. Например, $xml->Товары->Товар - обращение к тегу Товар.
1 2 3 4 5 6 7 8 9 10 11 12
<Товары> <Товар> <Ид>bd72d910-55bc-11d9-848a-00112f43529a</Ид> <Артикул>Б-130001</Артикул> <Наименование>Женские ботфорты</Наименование> <БазоваяЕдиница Код="715" НаименованиеПолное="Пара (2 шт.)" МеждународноеСокращение="NPR">пар</БазоваяЕдиница> <ПолноеНаименование>Женские ботфорты Б-130001 Фабрика обуви</ПолноеНаименование> <Группы> <Ид>bd72d90e-55bc-11d9-848a-00112f43529a</Ид> </Группы> </Товар> </Товары>
Тестирование и разработка без 1С
Запуск обработки файлов import.xml
, offers.xml
можно осуществлять через браузер с помощью запроса в адресной строке.
Тем самым Вы можете выполнять модификации и разработку без использования 1С.
Загрузите файлы import.xml
и offers.xml
в папку интернет-магазина:
/var/files/код_компании/exim/1С_ТекущаяДата
ТекущаяДата
- формате ДДММГГГГ.
Тестирование файла import.xml
Для тестирование файла import.xml
в адресной строке браузера введите:
ваш_домен/app/addons/rus_exim_1c/exim_1c.php?type=catalog&mode=import&filename=import.xml
Появиться окно авторизации в котором необходимо ввести имя пользователя интернет-магазина с правами администратора и его пароль.
После загрузки всех данных в окне браузера отобразиться слово означающее окончание обработки файла:
success
- означает успешное окончание обработки файла.failure
- означает, что в процессе загрузки файла произошла ошибка.
Для просмотра значения какой-либо переменной используйте функцию fn_print_r()
.
Например, добавьте fn_print_r($_product) в функцию fn_exim_1c_import_products.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php
function fn_exim_1c_import_products($xml, $user_data)
{
if (isset($xml->Товары->Товар)) {
if (Registry::isExist('rus_exim_1c.options_1c')) {
Registry::set('rus_exim_1c.options_1c', array());
}
$_cat = Registry::get('rus_exim_1c.categories_1c');
$products_1C = array();
$lang_code = CART_LANGUAGE;
foreach ($xml->Товары->Товар as $_product) {
fn_print_r($_product);
}
}
}
|
Зайдите в браузер и наберите:
ваш_домен/app/addons/rus_exim_1c/exim_1c.php?type=catalog&mode=import&filename=import.xml
В окне браузера должно появиться значения переменной $_product
.
Тестирование файла offers.xml
Для загрузки и обработки файла offers.xml
введите в браузере:
ваш_домен/app/addons/rus_exim_1c/exim_1c.php?type=catalog&mode=import&filename=offers.xml
После загрузки всех данных в окне браузера отобразиться слово означающее окончание обработки файла:
success
- успех.failure
- ошибка.
Результат тестирования
После обмена данными, можно посмотреть данные загруженные в интернет магазин:
- Данные категорий - “Меню Товары - Категории”.
- Данные о товарах и их ценах - “Меню Товары - Товары”.
Примечание
Загрузка файлов должна производиться последовательно. Запустите import.xml
, после окончания обработки, запустите offers.xml
.
В случае ошибок
Смотрите: Если возникла ошибка