Импорт битрикс через стандартный функционал (пример Норбел)
<?php
set_time_limit(0);
$_SERVER['DOCUMENT_ROOT'] = '/home/site.ru/www/';
$siteHash = trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/upload/norbel_site_hash.txt'));
$md5has = md5_file($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/upload/norbel_site.zip');
if ($siteHash != $md5has) {
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "ХЭШ НЕ СОВПАДАЕТ, СЛОМАННЫЙ АРХИВ -> " . date('Y-m-d H:i:s'));
} else {
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "Начало проверки файла -> " . date('Y-m-d H:i:s'));
$lastDateSaved = trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/last_date.txt'));
$lastDateChanged = date("Y-m-d", filemtime($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/upload/norbel_site.zip'));
if ($lastDateSaved == $lastDateChanged) {
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nФАЙЛ НЕ ИЗМЕНЕН, ПОСЛЕДНЕЕ ИЗМЕНЕНИЕ -> " . $lastDateSaved, FILE_APPEND);
} else {
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nФайл свежий -> " . date('Y-m-d H:i:s') . "\r\n", FILE_APPEND);
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/import.xml')) {
unlink($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/import.xml');
}
$zip = new ZipArchive;
$zip->open($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/upload/norbel_site.zip');
$zip->extractTo($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/');
$zip->close();
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/norbel_site.xml')) {
rename($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/norbel_site.xml', $_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/import.xml');
}
if (!file_exists($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/import.xml')) {
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nАРХИВ НЕ РАСПАКОВАН -> " . date('Y-m-d H:i:s'), FILE_APPEND);
} else {
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nАрхив распакован -> " . date('Y-m-d H:i:s'), FILE_APPEND);
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/last_date.txt', date('Y-m-d'));
$STATUS = 'progress';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://site.ru/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'login:parole');
$output = curl_exec($ch);
curl_close($ch);
$output = explode("\n", $output);
if ($output[0] == "success") {
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nСтарт импорта -> " . date('Y-m-d H:i:s'), FILE_APPEND);
$PHPSESSID = $output[1] . '=' . $output[2];
while ($STATUS == "progress") {
sleep(10);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://site.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=import.xml");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIE, $PHPSESSID);
$output = curl_exec($ch);
curl_close($ch);
$output = explode("\n", iconv("CP1251", "UTF-8", $output));
$STATUS = $output[0];
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\n" . $output[1] . " -> " . date('Y-m-d H:i:s'), FILE_APPEND);
}
if ($STATUS == "success") {
include($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
CModule::IncludeModule('iblock');
$IBLOCK_ID = 2;
// обновление цен
$res = CIBlockElement::GetList(
array("ID" => "ASC"),
array("IBLOCK_ID" => $IBLOCK_ID),
false,
array("nTopCount" => 999999),
array("ID", "DETAIL_PICTURE", "PROPERTY_KARTINKA", "PROPERTY_TSENA_V_RUBLYAKH")
);
while ($ar_res = $res->GetNext()) {
$PRODUCT_ID = $ar_res["ID"];
$PRICE = ceil($ar_res["PROPERTY_TSENA_V_RUBLYAKH_VALUE"]);
CPrice::SetBasePrice($PRODUCT_ID, $PRICE, "RUB");
Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($IBLOCK_ID, $PRODUCT_ID); // обновление фасетных индексов
}
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nЦены и фасетные индексы обновлены -> " . date('Y-m-d H:i:s'), FILE_APPEND);
// деактивация пустых разделов
$db_list = CIBlockSection::GetList(
array("ID" => "ASC"),
array("ACTIVE" => "Y", "IBLOCK_ID" => $IBLOCK_ID, "ELEMENT_SUBSECTIONS" => "Y", "CNT_ACTIVE" => "Y"),
true,
array("IBLOCK_ID", "ID", "NAME", "IBLOCK_SECTION_ID"),
false
);
while ($ar_result = $db_list->GetNext()) {
if ($ar_result['ELEMENT_CNT'] == 0) {
$bs = new CIBlockSection;
$bs->Update($ar_result['ID'], array("ACTIVE" => "N"));
}
}
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nПустые разделы деактивированы -> " . date('Y-m-d H:i:s'), FILE_APPEND);
// обновление картинок
$elementDB = CIBlockElement::GetList(
array("SORT" => "ASC"),
array("ACTIVE" => "Y", "IBLOCK_ID" => $IBLOCK_ID, "PROPERTY_AUTO_EMPTY_IMAGE" => 37),
false,
false,
array("ID", "IBLOCK_ID")
);
while ($elementArray = $elementDB->GetNext()) {
$el = new CIBlockElement;
$res = $el->Update($elementArray['ID'], array("PREVIEW_PICTURE" => array('del' => 'Y')));
CIBlockElement::SetPropertyValuesEx($elementArray['ID'], $elementArray['IBLOCK_ID'], array("AUTO_EMPTY_IMAGE" => false));
}
$elementDB = CIBlockElement::GetList(
array("ID" => "ASC"),
array("ACTIVE" => "Y", "PREVIEW_PICTURE" => false, "IBLOCK_ID" => 2, "!PROPERTY_KARTINKA" => "http://www.computermarket.ru/files/sitedata/Catalog/__stub.jpg"),
false,
false,
array("ID", "IBLOCK_ID", "PROPERTY_KARTINKA")
);
while ($elementArray = $elementDB->GetNext()) {
$pictUrl = str_replace('files/sitedata/Catalog', 'files/sitedatanorbel/Catalog', $elementArray['PROPERTY_KARTINKA_VALUE']);
$pageHeaders = get_headers($pictUrl);
if ($pageHeaders[0] == 'HTTP/1.1 200 OK') {
$propArray = array(
"PREVIEW_PICTURE" => CFile::MakeFileArray($pictUrl)
);
} else {
$propArray = array(
"PREVIEW_PICTURE" => CFile::MakeFileArray('https://site.ru/local/templates/.default/components/bitrix/catalog/catalog_with_filter/bitrix/catalog.section/.default/images/no_photo.png')
);
CIBlockElement::SetPropertyValuesEx($elementArray['ID'], $elementArray['IBLOCK_ID'], array("AUTO_EMPTY_IMAGE" => 37));
}
$el = new CIBlockElement;
$res = $el->Update($elementArray['ID'], $propArray);
}
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt', "\r\nКартинки обновлены -> " . date('Y-m-d H:i:s'), FILE_APPEND);
}
}
sleep(10);
}
}
}
$message = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/catalog/import/logImportNorbel.txt');
$to = 'q';
$toBCC = 'q';
$subject = 'Иqweл';
$headers = 'From: eqwe' . "\r\n" .
'To: eqwe' . "\r\n" .
'Bcc: ' . $toBCC . "\r\n" .
'Reply-To: eqwe' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>