Задача следующая. есть 1С 8.2 конфа розница 2.0. Так же есть Prestashop 1.4.8.2
Модуль для выгрузки из 1С выгружает xml файлы. отдельно категории и отдельным файлом товары.
Общее количество категорий около 322. Общее количество товаров 3750 позиций.
При попытке выгрузить через CSV Import выгружается не все товары.
Встал вопрос автоматизировать данный процесс и сделать через 1С.
Взял модуль для 1.3 от ors
И начала переделывать.
Так как его модуль рассчитан на стандартную выгрузку/загрузку для сайта от 1С то она мне не подходила.
итак Вопрос:
Получаю xml файл с содержимым:
Код:
<Категория>
<Ид>36</Ид>
<Уид>b6868ff4-b78a-11e1-a88a-dca971152d62</Уид>
<Наименование>Категория №1</Наименование>
<ИдРодитель>1</ИдРодитель>
<Родитель>HOME</Родитель>
</Категория>
<Категория>
<Ид>37</Ид>
<Уид>b6868ff5-b78a-11e1-a88a-dca971152d62</Уид>
<Наименование>Категория №2</Наименование>
<ИдРодитель>36</ИдРодитель>
<Родитель>Категория №1</Родитель>
</Категория>
С товарами таже ситауация.
Но трудности с добавлением в базу.
Вот что у меня
Код:
<?php
define('FIX_ZIP' , 'yes'); // true - использовать zip сжатие при получении файлов
define('FIX_ZIPSIZE' , 2048000); // размер арива zip в байтах
ini_set('display_errors', '1');error_reporting(E_ALL);
include(dirname(__FILE__).'/../../config/config.inc.php');
require_once(dirname(__FILE__).'/../../init.php');
require_once(dirname(__FILE__).'/../../images.inc.php');
require_once 'KLogger.php';
$log = new KLogger("log_connect.log");
$log->LogInfo($_SERVER['QUERY_STRING']);
$defaultLanguage = new Language((int)(Configuration::get('PS_LANG_DEFAULT')));
$categors = array();
function loadfile()
{
.....
}
function unzip($file,$folder='')
{
.......
}
function ClearBase()
{....}
function productswork()
{
global $log;
$log->LogInfo('PRODlogWorks');
$xml = simplexml_load_file(_PS_PROD_PIC_DIR_ . 'import_products.xml');
foreach($xml->Продукты->Продукт as $prod)
{
workprod($prod);
}
Db::getInstance()->Execute("
INSERT IGNORE INTO `"._DB_PREFIX_."category_product`(`id_product`,`id_category`) SELECT id_product,id_category_default FROM `"._DB_PREFIX_."product`
");
}
function workprod($product)
{
global $categors, $log;
if (!empty ($id_product)){
Db::getInstance()->Execute("
UPDATE `"._DB_PREFIX_."product`
SET `reference`='".$product->Артикул."', `date_upd`=NOW()
WHERE `id_product`= ".$id_product
);
Db::getInstance()->Execute("
UPDATE `"._DB_PREFIX_."product_lang`
SET `name`='".$product->Наименование."', `description_short`='".$product->ПолноеНаименование."'
WHERE `id_lang`=3 AND `id_product`= ".$id_product
);
} else {*/
//Добавляем
$log->LogInfo("prod");
Db::getInstance()->Execute("
INSERT INTO `"._DB_PREFIX_."product` (`xml`,`reference`,`id_category_default`,`date_add`,`date_upd`,`active`)
VALUES ('".(int)$product->Ид."', '".$product->Артикул."' , ".(int)$product->ИдРодитель.", NOW(), NOW(), 1)
");
$id_product=Db::getInstance()->Insert_ID();
Db::getInstance()->Execute("
INSERT INTO `"._DB_PREFIX_."product_lang` (`id_product`,`id_lang`, `name`,`description_short`,`link_rewrite`)
VALUES (".$id_product.", 6, '".$product->Наименование."', '".$product->Описание."', '".Tools::link_rewrite($product->Наименование)."')
");
Db::getInstance()->Execte("
INSERT IGNORE INTO `"._DB_PREFIX_."category_product`(`id_product`,`id_category`) SELECT id_product,id_category_default FROM `"._DB_PREFIX_."product`
");
return $id_product;
}
function categoryswork()
{
$categorys = array('Id','Uid','Name','IdParent','Parent');
global $log;
$index = 1;
$log->LogInfo('CATAlogWorks');
$xml = simplexml_load_file(_PS_PROD_PIC_DIR_ . 'import_categorys.xml');
foreach($xml->Категории->Категория as $categor)
{
$level = 1; $log->LogInfo('Level: 1');
Db::getInstance()->Execute("
INSERT INTO `"._DB_PREFIX_."category` (`xml`,`id_parent`,`level_depth`,`date_add`,`date_upd`,`active`)
VALUES ('".(int)$categor->Уид."', ".(int)$categor->ИдРодитель.", ".$level." , NOW(), NOW(), 1)
");
$id_category=Db::getInstance()->Insert_ID();
Db::getInstance()->Execute("
INSERT INTO `"._DB_PREFIX_."category_lang` (`id_category`,`id_lang`, `name`,`link_rewrite`)
VALUES (".(int)$categor->Ид.", 6, '".$categor->Наименование."', '".Tools::link_rewrite($categor->Наименование)."')
");
} else {
$level = 2; $log->LogInfo('Level: 2');
Db::getInstance()->Execute("
INSERT INTO `"._DB_PREFIX_."category` (`xml`,`id_parent`,`level_depth`,`date_add`,`date_upd`,`active`)
VALUES ('".(int)$categor->Уид."', ".(int)$categor->ИдРодитель.", ".$level." , NOW(), NOW(), 1)
");
$id_category=Db::getInstance()->Insert_ID();
Db::getInstance()->Execute("
INSERT INTO `"._DB_PREFIX_."category_lang` (`id_category`,`id_lang`, `name`,`link_rewrite`)
VALUES (".(int)$categor->Ид.", 6, '".$categor->Наименование."', '".Tools::link_rewrite($categor->Наименование)."')
");
}
Db::getInstance()->Execute("
INSERT IGNORE INTO `"._DB_PREFIX_."category_group`(`id_category`,`id_group`) SELECT id_category, FROM `"._DB_PREFIX_."category`
");
}
}
if (Tools::getValue('type')== 'catalog')
{
if (Tools::getValue('mode') == 'export') //?type=catalog&mode=export
{
print 'success\n';
}
if (Tools::getValue('mode') == 'init') //?type=catalog&mode=init
{
print "zip=" . FIX_ZIP . "\n" . FIX_ZIPSIZE;
}
if (Tools::getValue('mode')== 'checkauth') //?type=catalog&mode=checkauth
{
$log->LogInfo($_SERVER["PHP_AUTH_USER"]);
$log->LogInfo($_SERVER["PHP_AUTH_PW"]);
print "success\n";
}
if (Tools::getValue('mode') == 'file' && Tools::getValue('filename')) //?type=catalog&mode=file&filename=import.xml
{
print loadfile() . "\n";
}
if (Tools::getValue('mode') == 'import')
{
ClearBase();
categoryswork();
productswork();
}
print "success\n";
}
Вроде все правильно но после импорта в базе есть не все товары некоторые без наименование и потом они не в категориях даже не в домашней. И категории вроде все есть и все правильно но когда заходиш в monitoring это просто жуть.
Подскажите в чем трудность.
П.С. пробовал даже через
$Category = New Category();
......
$Category->add();
Не все категории загружаются.
Заранее благодарен.