ТЗ - отображение цен в базовой валюте сайта в простых и комплексных компонентов.
Реализация функциональности без модификации кода компонентов.
[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 ?> |