Разработка сайтов

Cопоставление товаров с сайта на Битрикс с товарами из 1с и удаление дублей

// сопоставление товаров с сайта с товарами из 1с и удаление дублей.


$parameters = array(
'select' => array ('*'),
'filter' => array ('IBLOCK_ID' => 2),
);
$arProducts = array();
$ar1cProducts = array();
$products = Bitrix\Iblock\ElementTable::getList($parameters);
while ($product = $products->fetch())
{
// у товара из 1с XML_ID длинее 6 символов
if(strlen($product['XML_ID']) > 6) {
$ar1cProducts[$product['NAME']] = array( "XML_ID" => $product['XML_ID'], "NAME" => $product['NAME'], "ID" => $product['ID']);
}
else
{
$arProducts[$product['NAME']] = array( "XML_ID" => $product['XML_ID'], "NAME" => $product['NAME'], "ID" => $product['ID']);
}
}
// разбила товары на 2 массива, с сайта и с 1с
pre($ar1cProducts);
pre($arProducts);

// перенос XML_ID и удаление дубля товара из массива товаров 1с.
foreach ($ar1cProducts as $c1Product)
{
if(array_key_exists($c1Product['NAME'], $arProducts))
{
$xml_id = $c1Product['XML_ID'];
$originID = $arProducts[$c1Product['NAME']]['ID'];
$data = array('XML_ID' => $xml_id);

CIBlockElement::Delete($c1Product['ID']);
$el = new CIBlockElement;
$res = $el->Update($originID, $data);
}
}
?>

* Товары находились в 1 инфоблоке, сравнивала я по внешнему коду (в 1с он длиннее 6 символов, на сайте нет). При разных ситуациях нужна доработка скрипта. Прошу те самые разные варианты выкладывать ниже. 


2) Сравнение 2-x инфоблоков, разделы и товары по xml-id

// Получаем товары из 2 разных инфоблоков
$arProducts = array();
$ar1cProducts = array();
// товары 1с
$parameters = array(
'select' => array ('*'),
'filter' => array ('IBLOCK_ID' => 13, '!IBLOCK_SECTION_ID' => '113'),
);
$products = Bitrix\Iblock\ElementTable::getList($parameters);
while ($product = $products->fetch())
{
$ar1cProducts[$product['XML_ID']] = $product['NAME'];
}
// товары на сайте
$parameters = array(
'select' => array ('*'),
'filter' => array ('IBLOCK_ID' => 2),
);
$products = Bitrix\Iblock\ElementTable::getList($parameters);
while ($product = $products->fetch())
{
$arProducts[$product['XML_ID']] = $product['NAME'];
}
// разбила товары на 2 массива, с сайта и с 1с
pre($ar1cProducts);
pre($arProducts);
// Сравниваем несовпадение по xml_id
foreach ($ar1cProducts as $key => $c1Product)
{
if(!array_key_exists($key, $arProducts))
{
pre( $key . ' - ' . $c1Product);

}
}

// Получаем разделы из 2 разных инфоблоков
$arSections = array();
$ar1cSections = array();
// разделы 1с
$arFilter = Array('IBLOCK_ID'=>13);
$db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true);
while($ar_result = $db_list->GetNext())
{
$ar1cSections[$ar_result['XML_ID']] = $ar_result['NAME'];
}
// разделы на сайте
$arFilter = Array('IBLOCK_ID'=>2);
$db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true);
while($ar_result = $db_list->GetNext())
{
$arSections[$ar_result['XML_ID']] = $ar_result['NAME'];
}
// разбила разделы на 2 массива, с сайта и с 1с
pre($ar1cSections);
pre($arSections);
// Сравниваем несовпадение по xml_id
foreach ($ar1cSections as $key1 => $c1Section)
{
if(array_key_exists($key1, $arSections))
{
pre( $key1 . ' - ' . $c1Section);

}
}
?>
Подписка на блог Подпишись на новые материалы от US STUDIO и вы не пропустите интересные статьи от нашей компании