Тоже попал на эту проблемку, решил следующим хаком.
в Classes/Currency.php находим и меняем следующие функции:
Код:
public function refreshCurrency($data, $isoCodeSource, $defaultCurrency)
{
if ($this->iso_code != $isoCodeSource)
{
/* Seeking for rate in feed */
foreach ($data->item AS $obj)
if ($this->iso_code == strval($obj->char3))
$this->conversion_rate = round($defaultCurrency->conversion_rate / floatval($obj->rate/$obj->size) , 6);
}
else
{
/* If currency is like isoCodeSource, setting it to default conversion rate */
$this->conversion_rate = round($defaultCurrency->conversion_rate / 1 , 6);
}
$this->update();
}
static public function refreshCurrenciesGetDefault($data, $isoCodeSource, $idCurrency)
{
$defaultCurrency = new Currency($idCurrency);
/* Change defaultCurrency rate if not as currency of feed source */
if ($defaultCurrency->iso_code != $isoCodeSource)
foreach ($data->item AS $obj){
if ($defaultCurrency->iso_code == strval($obj->char3))
$defaultCurrency->conversion_rate = round(floatval($obj->rate/$obj->size), 6);
}
return $defaultCurrency;
}
static public function refreshCurrencies()
{
if (!$feed = @simplexml_load_file('http://bank-ua.com/export/currrate.xml'))
return Tools::displayError('Cannot parse feed!');
if (!$defaultCurrency = intval(Configuration::get('PS_CURRENCY_DEFAULT')))
return Tools::displayError('No default currency!');
$isoCodeSource = strval('UAH');
$currencies = self::getCurrencies(true);
$defaultCurrency = self::refreshCurrenciesGetDefault($feed, $isoCodeSource, $defaultCurrency);
foreach ($currencies as $currency)
if ($currency->iso_code != $defaultCurrency->iso_code)
$currency->refreshCurrency($feed, $isoCodeSource, $defaultCurrency);
}
Как видно, курсы тянуться с
http://bank-ua.com/export/currrate.xml - а там все относительно гривны, поэтому пришлось немного поменять принцип преобразования. Незабудьте сначала создать валюту "Гривны" UAH. После смены валюты по-умолчанию незабудьте Обновить курсы валют.