Выгрузка каталога из системы учета в интернет-магазин
Содержание
Процесс обмена
Система учета инициализирует запуск файла
ваш_домен/app/addons/rus_exim_1c/controllers/frontend/exim_1c.php
.Система учета формирует и передает файлы с данными о товарах в папку
ваш_домен/var/files/код_компании/exim/1C_ТекущаяДата
вашего интернет-магазина.Например:
www.site.ru/var/files/код_компании/exim/1С_06062014
Система учета выгружает в интернет-магазин файлы:
Тип данных Название файла Расположение файла Данные товаров import.xml /var/files/код_компании/exim/1C_ТекущаяДата/import.xml
Цены товаров offers.xml /var/files/код_компании/exim/1C_ТекущаяДата/offers.xml
Изображения номенклатуры *.jpg
,*.jpеg
,*.png
/images/from_1c/
Система учета отправляет запрос на обработку
import.xml
.- Обрабатывается и сохраняется в базу данных основная информация о товарах.
- Изображения прикрепляются к товарам и копируются в папку
/images
.
Система учета запускает обработку
offers.xml
.На данном шаге обновляются:
- Цены
- Остатки
- Характеристики
Финиш!
Идентификация (соответствие) данных между системой учета и CS-Cart производится:
С помощью тега
<Ид>
(в выгружаемом файле) иexternal_id
(в базе данных CS-Cart).Примечание
Ид == external_id
По наименованию (при поиске категорий и характеристик в базе данных).
Обработка на стороне интернет-магазина
Обработку данных на стороне интернет-магазина выполняют файлы модуля “Экспорт и импорт в 1С”.
ваш_домен/app/addons/rus_exim_1c/controllers/frontend/exim_1c.php |
обрабатывает запросы от системы учета и подключает функции для обработки |
ваш_домен/app/addons/rus_exim_1c/func.php |
содержит функции обработки и загрузки данных. |
Авторизация и загрузка файлов
Загрузка файлов import.xml
и offers.xml
начинается с того, что система учета отправляет запрос:
ваш_домен/exim_1c?type=catalog&mode=checkauth
Параметры type
и mode
определяют какой код будет выполнен.
Выполняется авторизация и интернет-магазин передает системе:
success
- означающая успешность соединения.- Имя Cookie.
- Значение Cookie.
Примечание
Дальнейшие запросы к интернет-магазину со стороны системы учета будут содержать имя и значение Cookie. Обработка файлов происходит последовательно.
Обработка import.xml
Система учета отправляет в интернет-магазин запрос, для начала обработки import.xml
:
ваш_домен/exim_1c?type=catalog&mode=import&filename=import.xml
Выполняется пошаговая загрузка данных:
- Категорий - функция
fn_exim_1c_import_categories
- Свойства товара - функция
fn_exim_1c_import_features
- Товары - функция
fn_exim_1c_import_products
Обработка offers.xml
После обработки файла import.xml
, осуществляется обработка файла offers.xml
, по запросу со стороны системы учета:
ваш_домен/exim_1c?type=catalog&mode=import&filename=offers.xml
Обработка данных из файла offers.xml
производится с помощью функции fn_exim_1c_import_offers
файла func.php.
Результат
В случае успешной загрузки данных система учета передает строку со словом success
. Если что то пошло не так, то система передаст failure
.
Если возникла ошибка
Проверьте правильность ввода логина и пароля.
Проверьте содержит ли папка
ваш_домен/var/files/код_компании/exim/1С_ТекущаяДата
файлыimport.xml
иoffers.xml
.Проверьте имя папки
1С_ТекущаяДата
.ТекущаяДата
должна соответствовать текущей дате.Проверьте права у папки
ваш_домен/var/files/код_компании/exim/1С_ТекущаяДата
.Попробуйте очистить файлы cookie.
Проверьте права группы администратора в магазине, данные которого указаны в настройках системы учета.
Проверьте что модуль “Экспорт и импорт в 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
(функция fn_exim_1c_import загрузки данных товара вызывается из файла exim_1c.php).1 2 3 4 5 6 7 8 9 10 11 12 13
<?php if ($mode == 'import') { $fileinfo = pathinfo($filename); $xml = fn_exim_1c_get_xml($filename); if ($xml === false) { fn_echo("failure"); exit; } if (strpos($fileinfo['filename'], 'import') == 0) { fn_exim_1c_import($xml, $user_data, $company_id, $lang_code); } } }
Найдите цикл перебора товаров и добавьте код для записи значения в поле товара “Название страницы”, в зависимости от выбранной настройки “Использовать в названии страницы (SEO)” модуля “Экспорт и импорт в 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->$cml[‘ИмяТега’]. Список имен тегов находиться в файле ваш_домен/app/addons/rus_exim_1c/schemas/cml_fields/fields_names.php Например, $xml->$cml[‘products’] - обращение к тегу Товар.
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</Ид> </Группы> </Товар> </Товары>
Тестирование и разработка без системы учета
Запуск обработки файлов import.xml
, offers.xml
можно осуществлять через браузер с помощью запроса в адресной строке.
Тем самым вы можете выполнять модификации и разработку без использования систем учета.
Загрузите файлы import.xml
и offers.xml
в папку интернет-магазина:
/var/files/код_компании/exim/1С_ТекущаяДата
ТекущаяДата
- формате ДДММГГГГ.
Тестирование файла import.xml
Для тестирование файла import.xml
в адресной строке браузера введите:
ваш_домен/exim_1c?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);
}
}
}
|
Зайдите в браузер и наберите:
ваш_домен/exim_1c?type=catalog&mode=import&filename=import.xml
В окне браузера должно появиться значения переменной $_product
.
Тестирование файла offers.xml
Для загрузки и обработки файла offers.xml
введите в браузере:
ваш_домен/exim_1c?type=catalog&mode=import&filename=offers.xml
После загрузки всех данных в окне браузера отобразиться слово означающее окончание обработки файла:
success
- успех.failure
- ошибка.
Результат тестирования
После обмена данными, можно посмотреть данные загруженные в интернет магазин:
- Данные категорий - “Меню Товары - Категории”.
- Данные о товарах и их ценах - “Меню Товары - Товары”.
Примечание
Загрузка файлов должна производиться последовательно. Запустите import.xml
, после окончания обработки, запустите offers.xml
.
В случае ошибок
Смотрите: Если возникла ошибка