Вот нарыл -
По словам разработчиков, VirtueMart мультивалютен. На самом деле, вся мультивалютность сводится к конвертации из любой указанной в цене товара валюты в основную валюту интернет магазина. Работает это следующим образом: в настройках магазина указывается основная валюта (в моем случае, украинская гривна), заполняется справочник валют и в дальнейшем любую указанную в справочнике валюту можно использовать, то есть указывать в качестве валюты цены товара. В случае, если валюта используется, VirtueMart “на лету” преобразует ее в указанную основную валюту, даже не упоминая о том, что перевод выполнен. Для преобразования используется файл /administrator/components/com_virtuemart/classes/currency/convertECB.php, который получает данные о курсе валют из XML файла, ежедневно предоставляемого European Central Bank. Сам файл может быть найден здесь. После получения файла встроенный конвертер VirtueMart его кэширует и кладет в /cache/daily.xml и в дальнейшем курсы берет оттуда, обновляя его один раз в сутки.
Только тут есть, как всегда, грабли… ну не знает европейский центральный банк такой валюты как украинская гривна (UAH) :-)
Следовательно, для того, чтобы модуль перевода работал у нас есть 3 пути:
* Найти XML файл банка, который знает, что собственно такое есть украинская валюта. Такой файлик, например, можно найти здесь.
* Использовать текущий механизм для установки курса валют из админки и не возиться со всевозможными экспортами-импортами.
* Написать свой конвертер, в котором прописать курсы валют.
Столкнувшись в одном из проектов с этой проблемой, было принято решение сделать гибрид: используется встроенный механизм марта (лежит в файле convertECB.php), но берет данные он не из интернета, а из локального XML файла eurofxref-daily.xml, расположенного в корне сайта. Встроенный механизм VirtueMart кэширует его в /cache/daily.xml, который после каждого обновления основного файла необходимо удалять. Изменение курсов производится путем ручного исправления оригинального файла или из специально разработанного модуля админки Joomla. Модуль представляет собой набор PHP скриптов, не зарегистрированных никоим образом в Joomla, а лежащих в отдельной папке в /administrator/components/<любая-папка>, которые вызываются нажатием на кнопку «Управление курсами валют» и открываются в диалоговом окне Highslide.
Разработанный модуль для управления курсами валют в Virtuemart
Разработанный модуль для управления курсами валют в Virtuemart
Реализовать такое решение можно следующим образом:
1. Изменить файл – convertECB.php.Главное изменить строки (привести к следующему виду):
var $document_address = 'http://<URL>/eurofxref-daily.xml';
var $info_address = 'http://<URL>/';
Файл лежит в /administrator/components/com_virtuemart/classes/currency/convertECB.php
Этим изменением мы заставляем VirtueMart брать данные из локального файла на нашем сервере.
2. Скачать файл с валютами (
ссылка в конце поста). Файл рассчитан на 3 валюты: гривны, доллары США и евро. В случае необходимости их будет не трудно добавить
3. В файле /administrator/components/com_virtuemart/html/admin.curr_list.php после всего текста вставить:<br /><br />
<table style="border:1px solid #e7e7e7; cursor:pointer;">
<tr>
<td style="background-color:#f9f9f9;"><img src="/administrator/images/
edit_currrate.png" /></td>
<td valign="middle" style="vertical-align:middle;background-color:
#f9f9f9;">
<a onclick="return hs.htmlExpand(this, { objectType: 'ajax',
headingText: 'Управление курсами валют'} )" href="/administrator/
components/<папка>/index.php" >Управление курсами валют</a>
</td>
</tr>
</table>
При этом в шаблон админки Joomla должен быть вставлен код, реализующий открытие Highslide окон, иначе нужный интерфейс будет открыт просто в том же окне, что есть некрасиво.
4.
Создать свою папку в /administrator/components/ и создать в ней следующие файлы:
index.php, setrates.php, deltemp.php. Рабочее содержимое этих файлов будет приведено ниже. Файлы отвечают за отображение формы редактирования, сохранение данных и удаление временного закэшированного файла соответственно.
Index.php – форма редактирования курсов валют
setrates.php – скрипт установки введенных значений и очистки закешированного содержимого
deltemp.php – скрипт безусловной очистки кешированного содержимого
Ссылка на архив -
http://depositfiles.com/files/dqvevlesjPS - После недели тестирования решения на реальном инет-магазине, обнаружился следующий глюк: после первого изменения основной валюты инет-магазина в настройках VirtueMart, символьное обозначение валюты (напр., «грн.») перестает выводиться вообще Кроме того, цены округляются (хотя в настройках установлено отображать 2 знака после запятой)… Посколько инет-магазин уже работает, пришлось решать эту задачу…
Форматирование даты выполняется в файле /administrator/components/com_virtuemart/classes/currency/class_currency_display.php
Не мучаясь лукаво, предлагаю следующее решение:
1. закомментировать строки с 259 по 445 (форматирование суммы и обработка отрицательных сумм по образцу, установленному в настройках);
2. В строке 447 вставить:
3. Строку 455 привести к виду:
После этих изменений все начинает работать правильно.