- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/cml2.php
- Класс: CIBlockCMLImport
- Вызов: CIBlockCMLImport::ImportPrices
function ImportPrices($XML_PRICES_PARENT, $IBLOCK_ID, $IBLOCK_LID)
{
$price_sort = 0;
$this->next_step["XML_PRICES_PARENT"] = $XML_PRICES_PARENT;
$arLang = array();
foreach($IBLOCK_LID as $site_id)
{
$rsSite = CSite::GetList("sort", "asc", array("ID" => $site_id));
while ($site = $rsSite->Fetch())
$arLang[$site["LANGUAGE_ID"]] = $site["LANGUAGE_ID"];
}
$arPrices = CCatalogGroup::GetListArray();
if (!CatalogConfigFeature::isMultiPriceTypesEnabled())
{
$prices_limit = 1 - count($arPrices);
}
else
{
$prices_limit = null;
}
$arXMLPrices = $this->_xml_file->GetAllChildrenArray($XML_PRICES_PARENT);
$uniqPriceById = array();
foreach($arXMLPrices as $arXMLPrice)
{
$PRICE_ID = $arXMLPrice[$this->mess["IBLOCK_XML2_ID"]];
$PRICE_NAME = $arXMLPrice[$this->mess["IBLOCK_XML2_NAME"]];
if (array_key_exists($PRICE_ID, $uniqPriceById))
return GetMessage("IBLOCK_XML2_PRICE_DUP_ERROR");
else
$uniqPriceById[$PRICE_ID] = true;
$found_id = 0;
//Check for price by XML_ID
if (isset($PRICE_ID) && $PRICE_ID != "")
{
foreach($arPrices as $i => $arPrice)
{
if ($PRICE_ID === $arPrice["XML_ID"])
{
$found_id = $arPrice["ID"];
$arPrices[$i]["found"] = true;
break;
}
}
}
//When lookup by it's name
if (!$found_id)
{
foreach($arPrices as $arPrice)
{
if ($PRICE_NAME === $arPrice["NAME"] && !isset($arPrice["found"]))
{
$found_id = $arPrice["ID"];
break;
}
}
}
//Add new price type
if(!$found_id)
{
$price_sort += 100;
$arPrice = array(
"NAME" => $PRICE_NAME,
"XML_ID" => $PRICE_ID,
"SORT" => $price_sort,
"USER_LANG" => array(),
"USER_GROUP" => array(2),
"USER_GROUP_BUY" => array(2),
);
foreach($arLang as $lang)
{
$arPrice["USER_LANG"][$lang] = $arXMLPrice[$this->mess["IBLOCK_XML2_NAME"]];
}
if(!isset($prices_limit) || $prices_limit > 0)
{
CCatalogGroup::Add($arPrice);
}
elseif (isset($prices_limit))
{
if ($this->bitrix24mode)
{
return GetMessage("IBLOCK_XML2_PRICE_SB_ADD_ERROR_B24");
}
else
{
return GetMessage("IBLOCK_XML2_PRICE_SB_ADD_ERROR");
}
}
}
//We can update XML_ID of the price
elseif ($arPrices[$found_id]["XML_ID"] == '' && $PRICE_ID <> '')
{
CCatalogGroup::Update($found_id, array(
"XML_ID" => $PRICE_ID,
));
}
//We should update NAME of the price
elseif ($arPrices[$found_id]["NAME"] !== $PRICE_NAME && !$this->disable_change_price_name)
{
CCatalogGroup::Update($found_id, array(
"NAME" => $PRICE_NAME,
));
}
if (isset($prices_limit))
$prices_limit--;
}
return true;
}