ОБСУДИТЬ ПРОЕКТ
EN RU
Контакты
Мы на связи

Контактное лицо: Крылов
Александр Викторович

ИНН: 3100804517

+38 (095) 385-98-25

E-mail: [email protected]

Skype: gelos_912

Напишите нам

Спасибо, что обратились к нам!

Ваше сообщение отправлено и в ближайшее время мы его рассмотрим и постараемся ответить

Мультивалютность в Virtuemart

Мультивалютность в Virtuemart очень странный предмет – вот она есть, но глючит по страшному. Итак, что же это такое, с чем его едят и как заставить ее работать украинских условиях.
Мультивалютность в Virtuemart
Мультивалютность в Virtuemart очень странный предмет – вот она есть, но глючит по страшному. Итак, что же это такое, с чем его едят и как заставить ее работать украинских условиях.

Мультивалютность в Virtuemart очень странный предмет – вот она есть, но глючит по страшному :)

Итак, что же это такое, с чем его едят и как заставить ее работать украинских условиях ниже.

По словам разработчиков, 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.

Реализовать такое решение можно следующим образом:

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 – скрипт безусловной очистки кешированного содержимого

Внимание! Не используйте вышеприведенные файлы в «чистом» виде, поскольку они служат только для демонстрационных целей!! Для безопасной работы в эти файлы необходимо добавить также функции по распределению полномочий и ограничению несанкционированного доступа Joomla.

Оказавшие помощь ресурсы:
•    http://phpclub.ru/faq/PHP5/XML
•    http://joomlaforum.ru/index.php?topic=26078.90
•    http://joomlaforum.ru/index.php/topic,26078.0.html

UPD.: включил новую систему проверки комментов, посмотрим как работать будет:) прошу отписываться, господа :)

UPD. 2.: После недели тестирования решения на реальном инет-магазине, обнаружился следующий глюк: после первого изменения основной валюты инет-магазина в настройках Virtuemart, символьное обозначение валюты (напр., «грн.») перестает выводиться вообще :( Кроме того, цены округляются (хотя в настройках установлено отображать 2 знака после запятой)… Посколько инет-магазин уже работает, пришлось срочно решать эту задачу…
После некоторого количества чесания репы было обнаружено что форматирование даты выполняется в файле /administrator/components/com_virtuemart/classes/currency/class_currency_display.php
Не мучаясь лукаво, предлагаю следующее решение:
1. закомментировать строки с 259 по 445 (форматирование суммы и обработка отрицательных сумм по образцу, установленному в настройках);
2. В строке 447 вставить:

$res = round($nb,2);

3. Строку 455 привести к виду:

$res = $res." грн.";

После этих изменений все начинает работать правильно.

гарантии

гарантии

  • 10 лет на международном рынке
  • Внутренние стандарты качества
  • AGILE - методики планирования разработки
  • Передовые методики управления проектами с помощью JIRA
  • Налаженный производственный цикл от планирования и прототипирования до ручного и автоматического тестирования
посмотреть сертификаты отзывы наших клиентов
ГЛАВНОЕ В УСПЕШНОМ ИНТЕРНЕТ-ПРОЕКТЕ
это подобрать надежного и профессионального подрядчика с полным циклом услуг
заполнить бриф