ТЗ - отображение цен в базовой валюте сайта в простых и комплексных компонентов.
Реализация функциональности без модификации кода компонентов.
[spoiler]
Метод решения задачи через создания result_modifier.php
и его копирование в конкретных папок требуемых компонентов.
При ошибочном создание файла в неподходящей папке (компонент, который не показывает цены например) работоспособность компонента не нарушаеться
Действия
В режим Разработки копируется шаблон стандартного комплексного компонента
Идем на нужной для редактирование страницы (видны цены) и открывается шаблон соответного компонента для редакции
Например
catalog.element
директория на шаблона
/bitrix/templates/SVOI/components/bitrix/catalog/bgn/bitrix/catalog.element/.default
в директория шаблона создается новый файл с именем
result_modifier.php
и
код ниже
Чистим кэш компонента для визуализации результата.
Следует нахождение всех подходящих для редактированием страниц с показ цен из нужных компонентов до их полного обхода не смотря от того они в рамках простого или комплексного компонента находятся.
Код ниже действует для конкретных валютных и ценовых переменных на сайте.
При вводе новых валют и/или типы цен нужно чтоб они были извлечены из массив и добавлены для обработки в файле result_modifier.php.
Файл - result_modifier.php
Код
Реализация функциональности без модификации кода компонентов.
[spoiler]
Метод решения задачи через создания result_modifier.php
и его копирование в конкретных папок требуемых компонентов.
При ошибочном создание файла в неподходящей папке (компонент, который не показывает цены например) работоспособность компонента не нарушаеться
Действия
В режим Разработки копируется шаблон стандартного комплексного компонента
Идем на нужной для редактирование страницы (видны цены) и открывается шаблон соответного компонента для редакции
Например
catalog.element
директория на шаблона
/bitrix/templates/SVOI/components/bitrix/catalog/bgn/bitrix/catalog.element/.default
в директория шаблона создается новый файл с именем
result_modifier.php
и
код ниже
Чистим кэш компонента для визуализации результата.
Следует нахождение всех подходящих для редактированием страниц с показ цен из нужных компонентов до их полного обхода не смотря от того они в рамках простого или комплексного компонента находятся.
Код ниже действует для конкретных валютных и ценовых переменных на сайте.
При вводе новых валют и/или типы цен нужно чтоб они были извлечены из массив и добавлены для обработки в файле result_modifier.php.
Файл - result_modifier.php
Код
<?php
$siteCurrency=CCurrency::GetBaseCurrency();
if (array_key_exists('PRICE_MATRIX',$arResult) && is_array($arResult['PRICE_MATRIX']) && array_key_exists('MATRIX',$arResult['PRICE_MATRIX']))
foreach ($arResult['PRICE_MATRIX']['MATRIX'] as $key=>$PRICE)
if (array_key_exists(0,$arResult['PRICE_MATRIX']['MATRIX'][$key]) && array_key_exists('CURRENCY',$arResult['PRICE_MATRIX']['MATRIX'][$key][0])) {
$itemCurrency=$arResult['PRICE_MATRIX']['MATRIX'][$key][0]['CURRENCY'];
if ($itemCurrency!=$siteCurrency) {
if (array_key_exists('PRICE',$arResult['PRICE_MATRIX']['MATRIX'][$key][0]))
$arResult['PRICE_MATRIX']['MATRIX'][$key][0]['PRICE']=CCurrencyRates::ConvertCurrency(doubleval($arResult['PRICE_MATRIX']['MATRIX'][$key][0]['PRICE']),$itemCurrency, $siteCurrency);
if (array_key_exists('DISCOUNT_PRICE',$arResult['PRICE_MATRIX']['MATRIX'][$key][0]))
$arResult['PRICE_MATRIX']['MATRIX'][$key][0]['DISCOUNT_PRICE']=CCurrencyRates::ConvertCurrency(doubleval($arResult['PRICE_MATRIX']['MATRIX'][$key][0]['DISCOUNT_PRICE']),$itemCurrency,$siteCurrency);
$arResult['PRICE_MATRIX']['MATRIX'][$key][0]['CURRENCY']=$siteCurrency;
}
}
if (array_key_exists('ITEMS',$arResult) && is_array($arResult['ITEMS'])) {
foreach($arResult['ITEMS'] as $key1=>$value1)
foreach ($arResult['ITEMS'][$key1]['PRICES'] as $key2=>$value2) {
if (array_key_exists('CURRENCY',$arResult['ITEMS'][$key1]['PRICES'][$key2])) {
$itemCurrency=$arResult['ITEMS'][$key1]['PRICES'][$key2]['CURRENCY'];
if ($itemCurrency!=$siteCurrency) {
$valueArray=array('VALUE_NOVAT','VALUE_VAT','VATRATE_VALUE','DISCOUNT_VALUE_NOVAT',
'DISCOUNT_VALUE_VAT','DISCOUNT_VATRATE_VALUE','VALUE','DISCOUNT_VALUE');
foreach ($arResult['ITEMS'][$key1]['PRICES'][$key2] as $key3=>$value3)
if (in_array($key3,$valueArray)) {
$arResult['ITEMS'][$key1]['PRICES'][$key2][$key3]=CCurrencyRates::ConvertCurrency(doubleval($arResult['ITEMS'][$key1]['PRICES'][$key2][$key3]),$itemCurrency,$siteCurrency);
if (array_key_exists('PRINT_'.$key3,$arResult['ITEMS'][$key1]['PRICES'][$key2]))
$arResult['ITEMS'][$key1]['PRICES'][$key2]['PRINT_'.$key3]=CurrencyFormat(doubleval($arResult['ITEMS'][$key1]['PRICES'][$key2][$key3]),$siteCurrency);
}
$arResult['ITEMS'][$key1]['PRICES'][$key2]['CURRENCY']=$siteCurrency;
}
}
}
}
if (array_key_exists('PRICES',$arResult) && is_array($arResult['PRICES'])) {
foreach ($arResult['PRICES'] as $key2=>$value2) {
if (array_key_exists('CURRENCY',$arResult['PRICES'][$key2])) {
$itemCurrency=$arResult['PRICES'][$key2]['CURRENCY'];
if ($itemCurrency!=$siteCurrency) {
$valueArray=array('VALUE_NOVAT','VALUE_VAT','VATRATE_VALUE','DISCOUNT_VALUE_NOVAT',
'DISCOUNT_VALUE_VAT','DISCOUNT_VATRATE_VALUE','VALUE','DISCOUNT_VALUE');
foreach ($arResult['PRICES'][$key2] as $key3=>$value3)
if (in_array($key3,$valueArray)) {
$arResult['PRICES'][$key2][$key3]=CCurrencyRates::ConvertCurrency(doubleval($arResult['PRICES'][$key2][$key3]),$itemCurrency,$siteCurrency);
if (array_key_exists('PRINT_'.$key3,$arResult['PRICES'][$key2]))
$arResult['PRICES'][$key2]['PRINT_'.$key3]=CurrencyFormat(doubleval($arResult['PRICES'][$key2][$key3]),$siteCurrency);
}
$arResult['PRICES'][$key2]['CURRENCY']=$siteCurrency;
}
}
}
}
if (array_key_exists('CATALOG_CURRENCY_1',$arResult)) {
$catCurrency=$arResult['CATALOG_CURRENCY_1'];
if (array_key_exists('CATALOG_PRICE_1',$arResult) && $arResult['CATALOG_PRICE_1'] && $catCurrency!=$siteCurrency) {
$arResult['CATALOG_PRICE_1']=CCurrencyRates::ConvertCurrency(doubleval($arResult['CATALOG_PRICE_1']),$catCurrency,$siteCurrency);
$arResult['CATALOG_CURRENCY_1']=$siteCurrency;
}
}
if (array_key_exists('CATALOG_CURRENCY_2',$arResult)) {
$catCurrency=$arResult['CATALOG_CURRENCY_2'];
if (array_key_exists('CATALOG_PRICE_2',$arResult) && $arResult['CATALOG_PRICE_2'] && $catCurrency!=$siteCurrency) {
$arResult['CATALOG_PRICE_2']=CCurrencyRates::ConvertCurrency(doubleval($arResult['CATALOG_PRICE_2']),$catCurrency,$siteCurrency);
$arResult['CATALOG_CURRENCY_2']=$siteCurrency;
}
}
if (array_key_exists('CATALOG_CURRENCY_3',$arResult)) {
$catCurrency=$arResult['CATALOG_CURRENCY_3'];
if (array_key_exists('CATALOG_PRICE_3',$arResult) && $arResult['CATALOG_PRICE_3'] && $catCurrency!=$siteCurrency) {
$arResult['CATALOG_PRICE_3']=CCurrencyRates::ConvertCurrency(doubleval($arResult['CATALOG_PRICE_3']),$catCurrency,$siteCurrency);
$arResult['CATALOG_CURRENCY_3']=$siteCurrency;
}
}
if (array_key_exists('CATALOG_CURRENCY_4',$arResult)) {
$catCurrency=$arResult['CATALOG_CURRENCY_4'];
if (array_key_exists('CATALOG_PRICE_4',$arResult) && $arResult['CATALOG_PRICE_4'] && $catCurrency!=$siteCurrency) {
$arResult['CATALOG_PRICE_4']=CCurrencyRates::ConvertCurrency(doubleval($arResult['CATALOG_PRICE_4']),$catCurrency,$siteCurrency);
$arResult['CATALOG_CURRENCY_4']=$siteCurrency;
}
}
//error_log(var_export($arResult,true));
//Author Stephan Arabadjiev
?> |