多货币解决方案

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家



最近发现群里人有这个需求,每个人的实现方法不同下来我把我的方法介绍一下 同时谢谢大家一年多来对齐老师的支持,在这给群里的朋友们拜个早年。

1、首先在我们的后台网店设置里要添加汇率转换的功能,如何添加网店功能自己摸索一下,你要把添加的功能插入表里。如图:

我们的汇率都是和美元进行转换的。

2、开始前台实现:首先我们在首页加上多语言的链接如图:

我们看下他的url
  1. <UL>
  2. <LI><A href="{$url_head}¤cy=USD"><IMG src="images/USD.gif"> US Dollar</A></LI>
  3. <LI><A href="{$url_head}¤cy=EUR"><IMG src="images/EUR.gif"> Euro</A></LI>
  4. <LI><A href="{$url_head}¤cy=GBP"><IMG src="images/GBP.gif"> British Pound</A></LI>
  5. <LI><A href="{$url_head}¤cy=CNY"><IMG src="images/CNY.gif"> China RMB</A></LI>
  6. <LI><A href="{$url_head}¤cy=AUD"><IMG src="images/AUD.gif"> Austrilian Dollar</A></LI>
  7. </UL>
复制代码


这个{$url_head}我是重新建了一个文件 conn.php放到首页 每个文件调用
//路径处理
$url_this = "[url=http://]http://".$_SERVER[/url] ['HTTP_HOST'].$_SERVER['PHP_SELF']."?id=".$_GET['id'];
$smarty->assign("url_head",$url_this);

3、我们发现都是在每个页面后面传了一次get值 那么在那接这些get值呢 我们肯定要找每个页面的共同文件 不难想到init.php
我在init.php的最后加入
  1. [code]$currency = $_GET['currency'];
  2. if($currency!=""){
  3. $_SESSION['currency'] = $currency;
  4. }
  5. if($_SESSION['currency'] == '')
  6. {
  7. $_SESSION['currency'] = 'USD';
  8. }
复制代码
[/code]


这个代码大家明白吧 我接到get值后 给了session 如果session不存在话 我们默认就是usd 这样每个页面都可以获得当前的session值.
4、我们通过以上操作至少在每个页面可以搞定客户选的货币是什么,下来我们就考虑如何解决显示问题,如果每个页面都修改显示goods价格那多麻烦啊,我们熟悉ecshop的朋友不难想到我们所有显示的价格都是在一个函数里进行里处理 ,这应该感谢官方的技术人员 代码写的好 当然是 lib_common.php里得price_format()这个函数我们想一下 如果在这搞定是不是所有显示都搞定了 我们就从这入手以下是我修改后的函数
复制代码
  1. function price_format($price, $change_price = true)
  2. {

  3. $currency = $_SESSION['currency'];
  4. $rate = explode(',',$GLOBALS['_CFG']['rate']);
  5. if($currency == 'USD')
  6. {
  7. $price = $price*$rate[0];
  8. }
  9. if($currency == 'CNY')
  10. {

  11. $price = $price*$rate[3];
  12. }
  13. if($currency == 'EUR')
  14. {
  15. $price = $price*$rate[1];
  16. }
  17. if($currency == 'GBP')
  18. {
  19. $price = $price*$rate[2];
  20. }
  21. if($currency == 'AUD')
  22. {
  23. $price = $price*$rate[4];
  24. }
  25. if ($change_price && defined('ECS_ADMIN') === false)
  26. {
  27. switch ($GLOBALS['_CFG']['price_format'])
  28. {
  29. case 0:
  30. $price = number_format($price, 2, '.', '');
  31. break;
  32. case 1: // 保留不为 0 的尾数
  33. $price = preg_replace('/(.*)(\\.)([0-9]*?)0+$/', '\1\2\3', number_format($price, 2, '.', ''));

  34. if (substr($price, -1) == '.')
  35. {
  36. $price = substr($price, 0, -1);
  37. }
  38. break;
  39. case 2: // 不四舍五入,保留1位
  40. $price = substr(number_format($price, 2, '.', ''), 0, -1);
  41. break;
  42. case 3: // 直接取整
  43. $price = intval($price);
  44. break;
  45. case 4: // 四舍五入,保留 1 位
  46. $price = number_format($price, 1, '.', '');
  47. break;
  48. case 5: // 先四舍五入,不保留小数
  49. $price = round($price);
  50. break;
  51. }
  52. }
  53. else
  54. {
  55. $price = number_format($price, 2, '.', '');
  56. }
  57. switch ($currency)
  58. {
  59. case 'USD':
  60. return sprintf($GLOBALS['_CFG']['currency_format'], $price);
  61. break;
  62. case 'CNY':
  63. return sprintf($GLOBALS['_CFG']['cprice_format'], $price);
  64. break;
  65. case 'EUR':
  66. return sprintf($GLOBALS['_CFG']['aprice_format'], $price);
  67. break;
  68. case 'GBP':
  69. return sprintf($GLOBALS['_CFG']['ybprice_format'], $price);
  70. break;
  71. case 'AUD':
  72. return sprintf($GLOBALS['_CFG']['aoprice_format'], $price);
  73. break;
  74. }
  75. }
复制代码
$rate = explode(',',$GLOBALS['_CFG']['rate']);这句是从数据库获得我们当时的参数 然后我们计算 同时返回值的时候我们用了系统设置的符号 解决问题 前台就这样搞定。

5、有关交易 后台的操作我做简单的介绍 我们只是解决了显示问题 其实我们实质的数据还是美元 在我们提交订单的时候 我们在order_goods表加俩个字段一个是客户选的货币方式 这样生成订单后 当我进入我的会员中心我依然可以看到我购买人民币是多少钱 我们读取数据库的方式进行换算,另外一个字段是我们换算后的金额。当然我们之前美元的总金额都是在的 。在支付的时候 我们给贝宝付参数就是货币类型 。搞定。(如果有用看完就顶贴 )

回答:
支持共享~~

后台怎么操作的啊,我还是不太懂哦

支持一下,希望写的更加详细一些! 例如加入位置,模板什么的!还有后台的汇率比设置等等!

呵呵 基础代码应该学习下我之前写过的帖子。

支持支持!



我给大家提供一个货币汇率的API接口,这样就可以取得实时的最新汇率了!
http://app.17kaixin8.com/demo/currency.shtml

当然这只是个接口。转换开发就比较简单了,不用自己再定义汇率了!

qiyongdong 齐大哥的帖子要定呀..

支持下 每次齐老师都能带来点实质性的东西!

神使用,齐老师讲解的也很到位,赞一个!~

齐老师讲的太好了!您每个帖子我都保存了!从中我学习了很多!谢谢齐老师的无私奉献!

非常感谢齐老师,一个问题困扰我很久,齐老师给了个思路,我找了20分钟,只改了一个地方就搞定了.太感谢了

支持小齐,看不懂也要装懂,呵呵~

谢谢齐老师和我们分享 也提前给大家拜个早年