mr_Evil Posted October 16, 2011 Share Posted October 16, 2011 Кто нибудь пробовал привязать стоимость товаров в рублях к курсу доллара? Т.е. что бы в зависимости от курса доллара менялась стоимость товара в рублях, цены отображались во фронт - офисе тоже в единственной валюте - руб. Валюта по умолчанию - рубль. Link to comment Share on other sites More sharing options...
mr_Evil Posted October 19, 2011 Author Share Posted October 19, 2011 Вот в этом меню к примеру курс рубля 1, доллара 0.031977, валюта по умолчанию - рубль, все расчеты в рублях, во фронт офисе только одна валюта - рубль. Как привязать чтобы меняя курс доллара менялась цена товара не подскажите? Link to comment Share on other sites More sharing options...
mr_Evil Posted October 19, 2011 Author Share Posted October 19, 2011 Вообщем потренировался в денвере над магазином... Что понял: через вкладку Платежи -> Валюты мы можем менять все цены в магазине одним кликом изменив курс текущей валюты (неважно будет ли это изменившийся курс бакса или мы просто решили повысить или уронить цену на все товары). Чтобы во фронт офисе у меня не вылазил доллар, которые магазин к оплате не принимает я переименовал эту валюту в рубль, оставив только ее код чтобы их отличать и присвоил ей для начала курс 1. В итоге у меня получилось две одинаковые валюты. Далее одной из валют мы можем менять курс в зависимости от нашего желания изменить цену. Цена товара будет изменяться по формуле цена * курс . Что касается привязки к доллару - у меня товар забит с ценой исходя из курса 33 рубля за 1 доллар если вдруг курс изменился к примеру до 34. мы берем единицу товара которая стоит 3300 руб или $100 ( 100 * 33 = 3300 по старому курсу) , получаем новую стоимость товара 100*34 = 3400 и делим 3400 на 3300 получаем 1,030303 - это наш новый курс рубля. 3300*1,030303 = 3399,9999 что программа наверное округлит до 3400 Если сделал чего неправильно прошу поправить.... Link to comment Share on other sites More sharing options...
6poD9Ira Posted October 28, 2011 Share Posted October 28, 2011 Я как понял, вам надо что-бы в базе товар был в долларах, а покупался он в рублях. Есть модуль такой http://www.prestashop.com/forums/topic/9473-module-force-currency/ раньше он мне помогал. Выставляете в нем валюту для товаров в базе, а в настройках валюты по умолчанию рубль и отключаете выбор валюты на главной странице. Обновляется доллар, обновляются и все цены разом. Link to comment Share on other sites More sharing options...
wagood Posted November 7, 2011 Share Posted November 7, 2011 (edited) Та же проблема. Смотрите как я сделал (объединение двух методов . Пункт 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(); Теперь в списке выбора валют на страницах сайта внутренней валюты нет, но есть ещё одна штука - всё равно она показывается в ценах на сайте по-умолчанию для нового пользователя. Edited November 8, 2011 by wagood (see edit history) Link to comment Share on other sites More sharing options...
wagood Posted November 7, 2011 Share Posted November 7, 2011 (edited) Пункт 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 November 8, 2011 by wagood (see edit history) Link to comment Share on other sites More sharing options...
wagood Posted November 8, 2011 Share Posted November 8, 2011 Пункт 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 рубля), то у меня по-умолчанию везде будет внутренняя валюта для расчёта товара, но на сайте по-умолчанию будет проставляться рубль. 1 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now