Выгрузка каталога из системы учета в интернет-магазин

Предупреждение

Информация в данной статье устарела и может использоваться лишь в ознакомительных целях.

Процесс обмена

  1. Система учета инициализирует запуск файла ваш_домен/app/addons/rus_exim_1c/controllers/frontend/exim_1c.php.

  2. Система учета формирует и передает файлы с данными о товарах в папку ваш_домен/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/
  3. Система учета отправляет запрос на обработку import.xml.

    • Обрабатывается и сохраняется в базу данных основная информация о товарах.
    • Изображения прикрепляются к товарам и копируются в папку /images.
  4. Система учета запускает обработку offers.xml.

    На данном шаге обновляются:

    • Цены
    • Остатки
    • Характеристики
  5. Финиш!

Идентификация (соответствие) данных между системой учета и CS-Cart производится:

  1. С помощью тега <Ид> (в выгружаемом файле) и external_id (в базе данных CS-Cart).

    Примечание

    Ид == external_id

  2. По наименованию (при поиске категорий и характеристик в базе данных).

Обработка на стороне интернет-магазина

Обработку данных на стороне интернет-магазина выполняют файлы модуля “Экспорт и импорт в 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С_ТекущаяДата

Примечание

Примеры файлов можно скачать по ссылкам:

import.xml

offers.xml

Пример модификации

Если в процессе работы с модулем необходимо внести какие-либо изменения или добавить новые функции, то все изменения вносятся в файлы папки /app/addons/rus_exim_1c/.

Задача

Добавить настройку, которая позволит выбрать параметр из файла import.xml. Параметр будет добавлен в поле товара “Название страницы”.

Варианты настройки:

  • Не импортировать - означает, что при загрузке файлов в поле “Название страницы” данные записываться не будут.
  • Наименование - означает, что при загрузке файлов в поле “Название страницы” будет записываться данные файла import.xml тега <Наименование>.
  • Полное наименование - означает, что при загрузке файлов в поле “Название страницы” будет записываться данные файла import.xml тега <Описание>.

Решение

  1. Откройте файл /app/addons/rus_exim_1c/addon.xml.

  2. В открывшийся файл добавьте код настройки, позволяющая выбрать значение записываемое в поле товара “Название страницы”.

     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>
    
  3. Для записи значения в поле товара “Название страницы” откройте файл /app/addons/rus_exim_1c/func.php.

  4. Найдите функцию 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);
            }
    	}
    }
    
  5. Найдите цикл перебора товаров и добавьте код для записи значения в поле товара “Название страницы”, в зависимости от выбранной настройки “Использовать в названии страницы (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->Значение), " -");
                        }
                    }
    			}
    		}
        }
    }
    
  6. Для просмотра значений переменных и массивов используйте функцию 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

offers.xml

Тестирование файла 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.