Три года думал как в VirtuaeMart 1.x конвертировать валюту, оказалось что всё очень просто. VirtuaeMart берет курсы валют на сайте ЕЦБ по адресу http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml (файл administrator/components/com_virtuemart/classes/currency/convertECB.php), и в PHP коде функция конвертации выглядит следующим образом (файл libraries/user/product_parser.php):
function FormatProductPrice($price, $product_currency) { global $CURRENCY_DISPLAY; $converted_price = $GLOBALS['CURRENCY']->convert($price, $product_currency); return $CURRENCY_DISPLAY->getFullValue($converted_price); }
чтобы product_currency бралось из базы при листинге продуктов надо добавить соответствующее поле в запрос в файле administrator/components/com_virtuemart/html/shop_browse_queries.php:
// These are the names of all fields we fetch data from $fieldnames = ... , `#__{vm}_product`.`mdate`, `#__{vm}_product`.`cdate`, `attribute`, `product_currency`";
и в administrator/components/com_virtuemart/html/shop.browse.php добавить сточку
$products[$i]['product_currency'] = $db_browse->f('product_currency');
для листинга в components/com_virtuemart/themes/vm_mynxx/templates/browse/browse_3.php получается следующий код:
foreach($attributes as $attribute) { //echo $attribute['title']; foreach($attribute['options_list'] as $options_item) { $attr_lable = str_replace("_", " ", $options_item['base_var']); if (isset($options_item['display_price'])) { echo $attr_lable . ' =' . FormatProductPrice($options_item['display_price'], $product_currency) .'<br>'; } else { //echo "Vika entered a wrond attribute price."; echo $attr_lable . '<br>'; } } }
чтобы цена показывалась в заголовке документа нужно в файле administrator/components/com_virtuemart/html/shop.product_details.php добавить следующее:
//$page_title = $product_name; require_once (JPATH_LIBRARIES.DS.'user'.DS.'product_parser.php'); $page_title = GetProductTitle($product_id);
по идее надо бы округлять цену через PHP round().