当前位置: 首页 > news >正文

magento 货币换算

1、获取当前店铺的货币方法:
  当前店铺的基准货币:$baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
 $CurrentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
 $CurrentCurrencySymnol = Mage::app()->getLocale()->currency(Mage::app()->getStore()->getCurrentCurrencyCode())->getSymbol();
 $CurrentCurrencyName = Mage::app()->getLocale()->currency(Mage::app()->getStore()->getCurrentCurrencyCode())->getName();
2、获取自定义货币的符号,code,返回的是一个二维数组
  $currencyDate = Mage::getModel('currencysymbol/system_currencysymbol')->getCurrencySymbolsData();
//获取系统默认的结算币种
$baseCurrencyCode = Mage::app()->getBaseCurrencyCode();

//获取所有系统可用结算币种
$allowedCurrencies = Mage::getModel('directory/currency')
    ->getConfigAllowCurrencies();

//获取两个币种之间的汇率
$currencyRates = Mage::getModel('directory/currency')
    ->getCurrencyRates($baseCurrencyCode, array_values($allowedCurrencies));

下面是几个常用的货币转换方法。需要注意的是,凡是涉及到两个币种之间转换的,都必须确保系统中已经导入了两币种之间的汇率。更多币种之间的方法可以到directory/data助手类中找到。

// 将100人民币转换为美金
$Price = Mage::helper('directory')->currencyConvert(100, 'CNY', 'USD');
//将100美金转换为人民币
$Price = Mage::helper('directory')->currencyConvert(100, 'USD', 'CNY');

汇率的导入:
magento后台currency rate页面有个Import按钮:
图片描述
点击import导入货币汇率。
汇率导入的方法:

class Mage_Adminhtml_System_CurrencyController extends Mage_Adminhtml_Controller_Action
{
    public function fetchRatesAction()
    {
        try {
            $service = $this->getRequest()->getParam('rate_services');/*后台Import Service 的值*/
            $this->_getSession()->setCurrencyRateService($service);
            if( !$service ) {
                throw new Exception(Mage::helper('adminhtml')->__('Invalid Import Service Specified'));
            }
            try {/*实例化Webservicex这个Model,magento自带的是Webservicex*/
                $importModel = Mage::getModel(
                    Mage::getConfig()->getNode('global/currency/import/services/' . $service . '/model')->asArray()
                );
            } catch (Exception $e) {
                Mage::throwException(Mage::helper('adminhtml')->__('Unable to initialize import model'));
            }
            $rates = $importModel->fetchRates();
            $errors = $importModel->getMessages();
            if( sizeof($errors) > 0 ) {
                foreach ($errors as $error) {
                    Mage::getSingleton('adminhtml/session')->addWarning($error);
                }
                Mage::getSingleton('adminhtml/session')->addWarning(Mage::helper('adminhtml')->__('All possible rates were fetched, please click on "Save" to apply'));
            } else {
                Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('All rates were fetched, please click on "Save" to apply'));
            }

            Mage::getSingleton('adminhtml/session')->setRates($rates);
        }
        catch (Exception $e){
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
        }
        $this->_redirect('*/*/');
    }
}

下面是Webservicx的文件路径:
图片描述

说明:
$rates = $importModel->fetchRates();这不调用的方法在下面可以找到:

abstract class Mage_Directory_Model_Currency_Import_Abstract
{
/*Webservicex继承这个Model*/
 public function fetchRates()
    {
        $data = array();
        $currencies = $this->_getCurrencyCodes();/*获取website所有允许的货币code*/
        $defaultCurrencies = $this->_getDefaultCurrencyCodes();/*获取website中默认货币code*/
        @set_time_limit(0);/*设置程序执行时间,为零表示,执行直到程序结束(因为要去第三方获取资源,所以较长)*/
        foreach ($defaultCurrencies as $currencyFrom) {
            if (!isset($data[$currencyFrom])) {
                $data[$currencyFrom] = array();
            }

            foreach ($currencies as $currencyTo) {
                if ($currencyFrom == $currencyTo) {
                    $data[$currencyFrom][$currencyTo] = $this->_numberFormat(1);
                }
                else {
                    $data[$currencyFrom][$currencyTo] = $this->_numberFormat($this->_convert($currencyFrom, $currencyTo));
                }
            }
            ksort($data[$currencyFrom]);
        }

        return $data;
    }
}

根据以上几个方法,可以写一个定时任务,按时更新store的货币汇率

相关文章:

  • iOS -- tableView顶部留白
  • C链表的简单案例
  • Java与面向对象设计
  • TCP与UDP的区别
  • Mysql Order By 字符串排序,mysql 字符串order by
  • Java7,AutoClosable
  • Java循环练习:婚礼上的谎言
  • yum命令使用大全   软件安装
  • Linux信号
  • 云计算如何结合DevOps推动软件交付成功
  • gnome-boxes 的安装与使用
  • ETL简介
  • 前端学习笔记之观察者模式
  • LeetCode: Min Stack 最小栈 Java
  • HTTP 之 套接字
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Django 博客开发教程 16 - 统计文章阅读量
  • PHP那些事儿
  • tweak 支持第三方库
  • uva 10370 Above Average
  • vue-cli3搭建项目
  • 彻底搞懂浏览器Event-loop
  • 复习Javascript专题(四):js中的深浅拷贝
  • 关于List、List?、ListObject的区别
  • 解决iview多表头动态更改列元素发生的错误
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 延迟脚本的方式
  • !!Dom4j 学习笔记
  • #pragma once与条件编译
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (3)选择元素——(17)练习(Exercises)
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (转) Face-Resources
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net IE10 _doPostBack 未定义
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .Net 知识杂记
  • .net(C#)中String.Format如何使用
  • .NET构架之我见
  • .NET中两种OCR方式对比
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • [2016.7 day.5] T2
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)
  • [C++]类和对象【上篇】
  • [CSS] - 修正IE6不支持position:fixed的bug
  • [CTO札记]盛大文学公司名称对联