Решил следующим способом может кому пригодится )))
Создал помимо базовой цены дополнительные 3 типа цены (RUB, USD, EUR).
Их конвертирую из базовой цены и сортирую по выбранной валюте.
Конвертация:
Код |
---|
CModule::IncludeModule("iblock");
CModule::IncludeModule("catalog");
CModule::IncludeModule("sale");
$iTime = 0;
$arSelect = Array("ID");
$arFilter = Array("IBLOCK_ID"=>2, "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
// Пауза для снижения нагрузки
if($iTime == 25)
{
$iTime = 0;
sl eep(1);
}
// получаем базовую цену товара
$ar_res = CPrice::GetBasePrice($arFields['ID']);
// получаем цену со скидкой если она существует
$db_resSale = CPrice::GetList(
array(),
array(
"PRODUCT_ID" => $arFields['ID'],
"CATALOG_GROUP_ID" => 5
)
);
// если цена со скидкой сущетвует то заменяем базовую цену новым значением для обработки в массиве
if ($ar_resSale = $db_resSale->Fetch())
{
// обновляем цену
$ar_res["PRICE"] = $ar_resSale["PRICE"];
}
/********************************************/
// Валюта
$currRub = 'RUB';
// Конвертация цены в выбранную валюту
$newCurrRub = CCurrencyRates::ConvertCurrency($ar_res['PRICE'], $ar_res['CURRENCY'], $currRub);
// Массив с новыми занчениями
$arFieldsNewPriceRub = Array(
"PRODUCT_ID" => $arFields['ID'],
"CATALOG_GROUP_ID" => 4,
"PRICE" => $newCurrRub,
"CURRENCY" => $currRub
);
// Массив обновляемого товара (ID товара и тип обновляемой цены)
$resNewPriceRub = CPrice::GetList(
array(),
array(
"PRODUCT_ID" => $arFields['ID'],
"CATALOG_GROUP_ID" => 4
)
);
// обновление цены если цена существует, в противном случаи она добавится
if ($arrNewPriceRub = $resNewPriceRub->Fetch())
{
CPrice::Update($arrNewPriceRub["ID"], $arFieldsNewPriceRub);
}else{
CPrice::Add($arFieldsNewPriceRub);
}
/********************************************/
// Валюта
$currUsd = 'USD';
// Конвертация цены в выбранную валюту
$newCurrUsd = CCurrencyRates::ConvertCurrency($ar_res['PRICE'], $ar_res['CURRENCY'], $currUsd);
// Массив с новыми занчениями
$arFieldsNewPriceUsd = Array(
"PRODUCT_ID" => $arFields['ID'],
"CATALOG_GROUP_ID" => 3,
"PRICE" => $newCurrUsd,
"CURRENCY" => $currUsd
);
// Массив обновляемого товара (ID товара и тип обновляемой цены)
$resNewPriceUsd = CPrice::GetList(
array(),
array(
"PRODUCT_ID" => $arFields['ID'],
"CATALOG_GROUP_ID" => 3
)
);
// обновление цены если цена существует, в противном случаи она добавится
if ($arrNewPriceUsd = $resNewPriceUsd->Fetch())
{
CPrice::Update($arrNewPriceUsd["ID"], $arFieldsNewPriceUsd);
}else{
CPrice::Add($arFieldsNewPriceUsd);
}
/********************************************/
// Валюта
$currEur = 'EUR';
// Конвертация цены в выбранную валюту
$newCurrEur = CCurrencyRates::ConvertCurrency($ar_res['PRICE'], $ar_res['CURRENCY'], $currEur);
// Массив с новыми занчениями
$arFieldsNewPriceEur = Array(
"PRODUCT_ID" => $arFields['ID'],
"CATALOG_GROUP_ID" => 2,
"PRICE" => $newCurrEur,
"CURRENCY" => $currEur
);
// Массив обновляемого товара (ID товара и тип обновляемой цены)
$resNewPriceEur = CPrice::GetList(
array(),
array(
"PRODUCT_ID" => $arFields['ID'],
"CATALOG_GROUP_ID" => 2
)
);
// обновление цены если цена существует, в противном случаи она добавится
if ($arrNewPriceEur = $resNewPriceEur->Fetch())
{
CPrice::Update($arrNewPriceEur["ID"], $arFieldsNewPriceEur);
}else{
CPrice::Add($arFieldsNewPriceEur);
}
/********************************************/
$iTime++;
}
|
В компоненте ставлю сортировку CATALOG_PRICE_ID - (ID - типа цены)