Jump to content

Привязать стоимость товаров к курсу $


Recommended Posts

Кто нибудь пробовал привязать стоимость товаров в рублях к курсу доллара?

Т.е. что бы в зависимости от курса доллара менялась стоимость товара в рублях, цены отображались во фронт - офисе тоже в единственной валюте - руб. Валюта по умолчанию - рубль.

Share this post


Link to post
Share on other sites

Вот в этом меню к примеру курс рубля 1, доллара 0.031977, валюта по умолчанию - рубль, все расчеты в рублях, во фронт офисе только одна валюта - рубль. Как привязать чтобы меняя курс доллара менялась цена товара не подскажите?

Share this post


Link to post
Share on other sites

Вообщем потренировался в денвере над магазином... Что понял: через вкладку Платежи -> Валюты мы можем менять все цены в магазине одним кликом изменив курс текущей валюты (неважно будет ли это изменившийся курс бакса или мы просто решили повысить или уронить цену на все товары). Чтобы во фронт офисе у меня не вылазил доллар, которые магазин к оплате не принимает я переименовал эту валюту в рубль, оставив только ее код чтобы их отличать и присвоил ей для начала курс 1. В итоге у меня получилось две одинаковые валюты. Далее одной из валют мы можем менять курс в зависимости от нашего желания изменить цену. Цена товара будет изменяться по формуле цена * курс . Что касается привязки к доллару - у меня товар забит с ценой исходя из курса 33 рубля за 1 доллар если вдруг курс изменился к примеру до 34. мы берем единицу товара которая стоит 3300 руб или $100 ( 100 * 33 = 3300 по старому курсу) , получаем новую стоимость товара 100*34 = 3400 и делим 3400 на 3300 получаем 1,030303 - это наш новый курс рубля. 3300*1,030303 = 3399,9999 что программа наверное округлит до 3400

Если сделал чего неправильно прошу поправить....

Share this post


Link to post
Share on other sites

  • 2 weeks later...

Я как понял, вам надо что-бы в базе товар был в долларах, а покупался он в рублях. Есть модуль такой http://www.prestashop.com/forums/topic/9473-module-force-currency/ раньше он мне помогал. Выставляете в нем валюту для товаров в базе, а в настройках валюты по умолчанию рубль и отключаете выбор валюты на главной странице. Обновляется доллар, обновляются и все цены разом.

Share this post


Link to post
Share on other sites

  • 2 weeks later...

Та же проблема. Смотрите как я сделал (объединение двух методов :).

 

Пункт 1.

Делаю внутреннюю валюту с ISO кодом 999 и с курсом 1 по умолчанию. Привязываю к ней фиксированный курс рубля 32. Остальные валюты привязываю в соответствии со своими расчётами. (См. приложенный файл со снимком экрана)

 

Всё было бы хорошо, но нужно решить проблему с тем, чтобы не показывалась эта валюта в списке выбора валют на страницах сайта (модуль blockcurrencies). Придётся кое-что подправлять.

Во-первых, в override/classes создаю Currency.php следующего содержания:

class Currency extends CurrencyCore
{
public static function getCurrencies_exclude($object = false, $active = 1)
{
 $tab = Db::getInstance()->ExecuteS('
 SELECT *
 FROM `'._DB_PREFIX_.'currency`
 WHERE `deleted` = 0 AND iso_code_num != 999
 '.($active == 1 ? 'AND `active` = 1' : '').'
 ORDER BY `name` ASC');
 if ($object)
  foreach ($tab as $key => $currency)
$tab[$key] = Currency::getCurrencyInstance($currency['id_currency']);
 return $tab;
}
}

это я переопределяю функцию getCurrencies для использования в blockcurrencies на getCurrencies_exclude, где чтобы скрыть ненужную к выводу валюту с ISO кодом 999 идёт строчка:

AND iso_code_num != 999

и заменяю вызов функции в blockcurrencies.php

  $currencies = Currency::getCurrencies(); 

на

 $currencies = Currency::getCurrencies_exclude();

 

Теперь в списке выбора валют на страницах сайта внутренней валюты нет, но есть ещё одна штука - всё равно она показывается в ценах на сайте по-умолчанию для нового пользователя.

post-20058-0-11094300-1320673213_thumb.png

Edited by wagood (see edit history)

Share this post


Link to post
Share on other sites

Пункт 2.

Тут пришлось допилить по методу из module_force_currency. В результате hookTop модуля blockcurrencies стал выглядеть вот так:

 

public function hookTop($params)
{
 if (Configuration::get('PS_CATALOG_MODE'))
  return ;

 global $smarty, $cookie;
 // Если id_currency равен id внутренней валюты (проставить нужную цифру, у меня 5)
 if (!isset($cookie->id_currency) || $cookie->id_currency == 5)
 {
  // устанавливаем по умолчанию валюту (у меня 4 , то есть руб.)
  $currency = new Currency(intval(4));
  if (is_object($currency) AND $currency->id AND !$currency->deleted)
$cookie->id_currency = intval($currency->id);
  if ($cookie->id_currency)
  {
$currency = new Currency(intval($currency->id));
if (is_object($currency) AND $currency->id AND intval($currency->deleted) != 1)
 return $this->display(__FILE__, 'blockcurrencies_refresh.tpl');
  }

 }
 $currencies = Currency::getCurrencies_exclude();
 if (!sizeof($currencies))
  return '';
 $smarty->assign('currencies', $currencies);
 return $this->display(__FILE__, 'blockcurrencies.tpl');
}

 

ну и ещё нужен дополнительный шаблон

blockcurrencies_refresh.tpl

 

<form id="setCurrency" action="{$request_uri}" method="post">
<input type="hidden" name="id_currency" value="4"/>
</form>
<script type="text/javascript">
$('form#setCurrency').submit();
</script>

 

Смысл в чём: если не установлена cookie с id валюты, или она равна 5 (в моём случае, поменять на нужную в вашем случае), то устанваливается cookie с id валюты 4 (в моём случае мне нужны рубли по-умолчанию).

Edited by wagood (see edit history)

Share this post


Link to post
Share on other sites

Пункт 3. Более изящный и простой способ (не нужен Пункт 2).

 

Заменяем код установки cookie по-умолчанию при первой загрузки страницы. Оказывается это делается функцией Tools::setCurrency().

Нужно лишь заменить её, сделав изменённую копию в папке override/classes

 

Создаём или редактируем в этой папке файл Tools.php

 

class Tools extends ToolsCore
{
public static function setCurrency()
{
 global $cookie;
 if (self::isSubmit('SubmitCurrency'))
  if (isset($_POST['id_currency']) AND is_numeric($_POST['id_currency']))
  {
$currency = Currency::getCurrencyInstance((int)($_POST['id_currency']));
if (is_object($currency) AND $currency->id AND !$currency->deleted)
 $cookie->id_currency = (int)($currency->id);
  }
 if ((int)$cookie->id_currency)
 {
  $currency = Currency::getCurrencyInstance((int)$cookie->id_currency);
  if (is_object($currency) AND (int)$currency->id AND (int)$currency->deleted != 1 AND $currency->active)
return $currency;
 }
 // Мой апдейт старт
 if ((int)(Configuration::get('PS_CURRENCY_FRONTEND_DEFAULT')))
 {
  $currency = Currency::getCurrencyInstance((int)(Configuration::get('PS_CURRENCY_FRONTEND_DEFAULT')));
  if (is_object($currency) AND $currency->id)
$cookie->id_currency = (int)($currency->id);
  return $currency;
 }
 // Мой апдейт энд

 $currency = Currency::getCurrencyInstance((int)(Configuration::get('PS_CURRENCY_DEFAULT')));
 if (is_object($currency) AND $currency->id)
  $cookie->id_currency = (int)($currency->id);
 return $currency;
}
}

 

Здесь мы делаем проверку на существование поля в таблице ps_configuration PS_CURRENCY_FRONTEND_DEFAULT куда можно прописать id той валюты, которая будет по-умолчанию во фронтенде. То есть если я создам там такое поле и пропишу в него 4 (id рубля), то у меня по-умолчанию везде будет внутренняя валюта для расчёта товара, но на сайте по-умолчанию будет проставляться рубль.

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More