Drushop 2.2 как сделать автоматическую конвертацию валют в магазине

Главные вкладки

Аватар пользователя Игорь Сова Игорь Сова 14 января 2015 в 15:59

Привет форумчане!
Хотел бы помощи в таком вопросе: основная валюта в инет магазине - гривна. Клиент желает при создании товара писать цену в доларах, а чтобы цена для пользователей отображалась по текущему курсу НБУ в гривнах.

Может быть на форуме есть уже ответ, я не нашел (точнее, наверное, не знал как правильно искать).
Инет магазин работает на системе drushop 2.2 (drupal 6.25).

Если есть решение, буду благодарен.

Комментарии

Аватар пользователя validoll validoll 16 января 2015 в 9:29

"Игорь Сова" wrote:
Клиент желает при создании товара писать цену в доларах

Всегда, или в одних товарах гривны, а в других доллары?

Если всегда доллары, то можно при загрузке ноды товара делать пересчет и в цену писать уже вычисленное значение. Смотри в сторону hook_nodeapi().

Если нет, то тогда нужно как-то отличать в какой валюте указана цена, например использовать Money, а затем первая схема.

И надо где-то еще хранить курс, но его можно просто в переменной хранить и обновлять по крону.

Аватар пользователя Игорь Сова Игорь Сова 19 января 2015 в 23:48

Нужно чтоб он писал цену в админке в доларах для всех товаров, а модуль умножал на курс гривны и выводил гривну.
Готовый модуль нашел здесь от пользователя sv2109, все умножается хорошо.
Сделал так:попробовал подключить модуль (в валютах в магазине ничего не менял - так и гривна, просто админ пишет свою цену, а модуль умножает его на курс = итого должна быть коректная цена товара). В модуле в фунции, которая уже делает умножение

<?phpfunction uc_multi_currency_price_handler_alter(&$price, &$context, &$options) {
  if ($context['subject']['node']->field_currency[0]['value'] == "usd") {
    $price['price'] *= variable_get('currency_rate', 8); 
  }  
}?>

убрал цикл if, чтоб скрипт выполнялся без ошибок, так как валюта сайта одна - оставил просто умножение.
Но возникла следующая проблема: когда товар добавляется в корзину - цена товара умжножается дважды на курс. Предполагаю, что проблема в том, что умножаю не на ту переменную. метод перебора переменных с ценами также не помог. с пхп, как уже понятно, не очень дружу.
Кстати, вот весь скрипт модуля

<?php
// $Id$
/**
 * @file 
 * allow 2 base currency for products
 */

/**
  * Implementation of hook_menu().
  */

function uc_multi_currency_menu() { 
   
$items['admin/content/multi_currency'] = array(
      
'title' => 'Курс валюти',
      
'description' => 'Ручна зміна курсу валюти',
      
'page callback' => 'drupal_get_form',
      
'page arguments' => array('uc_multi_currency_form'),
      
'access callback' => 'user_access',
      
'access arguments' => array('change currency'),
      
'type' => MENU_NORMAL_ITEM,
   );
   return 
$items;
}

/**
 * Implementation of hook_perm().
 */
function uc_multi_currency_perm() {
  return array(
'change currency');
}

/**
  * Define the form.
  */

function uc_multi_currency_form($form_state) {

    

$form['currency_rate'] = array(
      
'#type' => 'textfield',
      
'#title' => t('Курс валюти'),
      
'#default_value' => variable_get('currency_rate'7.9),
      
'#description' => t('Дійсний курс для долара США.')
   );

   

$form['submit'] = array(
      
'#type' => 'submit',
      
'#value' => t('Встановити'),
   );
   return 
$form;
}

/**
  * Handle submission of the form and saving
  * of the data to the database.
  */

function uc_multi_currency_form_submit($form$form_state) {   
   
$currency_rate $form_state['values']['currency_rate'];
   
variable_set('currency_rate'$currency_rate);
}

/**
 * Implementation of hook_uc_price_handler().
 */
function uc_multi_currency_uc_price_handler() {
  return array(
    
'alter' => array(
      
'title' => t('Мульти валюта'),
      
'description' => t('Изменение цены товара в зависимости от валюты'),
      
'callback' => 'uc_multi_currency_price_handler_alter',
    ),    
  );
}

/**
 * Изменение цены товара в зависимости от валюты
 * 
 */
function uc_multi_currency_price_handler_alter(&$price, &$context, &$options) {
  if (
$context['subject']['node']->field_currency[0]['value'] == "usd") {
    
$price['price'] *= variable_get('currency_rate'8); 
  }  
}
?>

Помогите пожалуйста разобратся. Спасибо.