Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

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

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

         Здравствуйте. Прошу Вашей помощи. Уже третий день ломаю голову. 

Не могу сконвертировать 2 валюты для USD (доллар США) и UZS (Узбекский сум)

     Использую модуль "Сommerce multicurrency" при конвертировании валюты обновляются только Российский рубль и другие некоторые ... Установил модуль "Сurrency" так как в UZS в Commerce не было данной валюты т. е. Узбекского сома.

При конвертировании UZS И USD цена товара не изменяется.   100$ и 100 Сум   хотя выстовляю в конвертере по курсу.

      Прошу Вашей помощи.

 

 

1 answer
votes: 1114
Answer

Здравствуйте, вот пример кода для commerce multicurrency, для перевода одной валюты в другую, у меня это из евро в рубли:

<?php
function custom_cron(){


  $euro = db_query('SELECT * FROM {field_data_commerce_price_eur}', array());
 // dsm($euro);
  $rub = db_query('SELECT * FROM {field_data_commerce_price}', array());
  $rub_prices = array();
  foreach($rub as $money){
    $rub_prices[] = $money->entity_id;
  }





  foreach($euro as $one){
    $commerce_multicurrency = variable_get('commerce_multicurrency_conversion_settings');
    $sum = $one->commerce_price_eur_amount * $commerce_multicurrency['EUR']['rates']['RUB']['rate'];
    $sum = round($sum);
    if(in_array($one->entity_id,$rub_prices)){
      $query = db_update('field_data_commerce_price')
        ->fields(array(
          'entity_type' => 'commerce_product',
          'bundle' => $one->bundle,
          'deleted' => $one->deleted,
          'entity_id' => $one->entity_id,
          'revision_id' => $one->revision_id,
          'language' => $one->language,
          'delta' => $one->delta,
          'commerce_price_amount' => $sum,
          'commerce_price_currency_code' => 'RUB',
          'commerce_price_data' => $one->commerce_price_eur_data,
        ))
        ->condition('entity_id', $one->entity_id)
        ->execute();
    }else{
      $query = db_insert('field_data_commerce_price')
        ->fields(array(
          'entity_type' => 'commerce_product',
          'bundle' => $one->bundle,
          'deleted' => $one->deleted,
          'entity_id' => $one->entity_id,
          'revision_id' => $one->revision_id,
          'language' => $one->language,
          'delta' => $one->delta,
          'commerce_price_amount' => $sum,
          'commerce_price_currency_code' => 'RUB',
          'commerce_price_data' => $one->commerce_price_eur_data,
        ))
        ->execute();
    }
  }


  /*
  $query = db_update('field_data_commerce_price_rub')
    ->join('field_data_commerce_price', 'price', 'field_data_commerce_price_rub.entity_id = price.entity_id');
  $query = $query ->fields(array(
    'field_data_commerce_price_rub.commerce_price_rub_amount' => 'rub.commerce_price_rub_amount',
  ));
  $query->execute();
  */
}
?>

Также возможно придется брать курс валют из Российского центробанка:

<?php
    $url = 'http://www.cbr.ru/scripts/XML_daily.asp';
    $curr_name = array('LTL', 'LVL', 'EEK', 'EUR', 'PLN');
    $reader = New XMLReader();
    $reader->open($url);
    $i = 0;
    $output = array();
    while ($reader->read()) {
        if ($reader->nodeType == XMLReader::ELEMENT) {
            if ($reader->localName == 'CharCode') {
                $reader->read();
                $name = $reader->value;
            }
            if (in_array($name, $curr_name) && $reader->localName == 'Value') {
                $reader->read();
                $output[$name] = str_replace(",", ".", $reader->value);
            }
        }
    }
    foreach ($output as $key => $value) {
        variable_set($key, $value);
    }
?>