Мультивалютность для Ubercart 3 (Drupal 7) - PullRequest
3 голосов
/ 07 октября 2011

Существуют ли какие-либо решения для Ubercart 3 (drupal 7) (например, Drupal Ubercart: мультивалютность? ) или советы для лучшей реализации такой вещи?

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Я не рекомендую вам жестко его кодировать.Вы потеряете все свои изменения при следующем обновлении.Попробуйте проверить эту тему: http://drupal.org/node/1434470#comment-5582812

1 голос
/ 30 октября 2011

В качестве одного из решений я нахожу и использую это:

в ubercart / store / uc_store.module добавить новое определение, например

define('RUR',0.33);

, где 0,33 - это разница между значениями по умолчаниювалюта и новая валюта (руб.) руб. / Доллар = 0,33

и в функции uc_currency_format добавьте:

  global $language;
  if ($language->language=='ru') {
    $sign = ' RUB'; 
    $thou = ','; 
    $dec = '.';    
    $value = $value / RUR;
    $sign_after = FALSE;
  };

И полную функцию:

function uc_currency_format($value, $sign = NULL, $thou = NULL, $dec = NULL) {
  if ($value === NULL) {
    return NULL;
  }

  $output = '';

  $sign_after = variable_get('uc_sign_after_amount', FALSE);
  $prec = variable_get('uc_currency_prec', 2);
  if (is_null($sign)) {
    $sign = variable_get('uc_currency_sign', '$');
  }
  if (is_null($thou)) {
    $thou = variable_get('uc_currency_thou', ',');
  }
  if (is_null($dec)) {
    $dec = variable_get('uc_currency_dec', '.');
  };

  // If the value is significantly less than the minimum precision, zero it.
  if ($prec > 0 && round(abs($value), $prec + 1) < pow(10, -$prec)) {
    $value = 0;
  }

  global $language;
  if ($language->language=='ru') {
    $sign = '$'; 
    $thou = ','; 
    $dec = '.';    
    $value = $value / RUR;
    $sign_after = FALSE;
  };

  // Force the price to a positive value and add a negative sign if necessary.
  if ($value < 0) {
    $value = abs($value);
    $output .= '-';
  }

  // Add the currency sign first if specified.
  if ($sign && !$sign_after) {
    $output .= $sign;
  }

  // Format the number, like 1234.567 => 1,234.57
  $output .= number_format($value, $prec, $dec, $thou);

  // Add the currency sign last if specified.
  if ($sign && $sign_after) {
    $output .= $sign;
  };

  if ($value=='0') {
  $output = t('free'); 
  };
  return $output;
}
...