EZ Publish/EZ Publish 多货币功能
EZ Publish | EZ Publish安装与卸载 | EZ Publish的使用 | EZ Publish常见问题 | EZ Publish其他 |
本条目的目的是介绍与解释eZ Publish 3.8 内建的多货币特性。不熟悉eZ Publish 网络商店子系统的用户,应该先阅读“EZ Publish其他”中的“EZ Publish网络商店”一节。下一小节会帮助理解以下问题:
• 自定义价格和自动价格的概念
• 什么是基本自定义价格
• 如何为自动价格指定价格取舍规则
• 如何使用汇率(自动汇率和自定义汇率)
• 什么是基础货币
• 如何管理货币
• 什么是优先货币
• 如何对多价格商品使用附加的视图模板
• “商品一览”界面的用途
• 如何使用默认的汇率更新处理器
• 如何创建自己的汇率更新处理器
• 如何将商品转换为多价格格式
自定义价格与自动价格[ ]
多价格数据类型允许为每个商品设置多货币价格。如果使用例如:五种货币,那么商品总是有五种价格。但是,不需要全部手动为它们输入价格,尽管可以这样做。需要至少为商品指定一个价格,它被称为基本自定义价格(简称为基础价格)。系统会使用适当的汇率自动将基础价格转换为不同货币的价格(在本例中,其余四种货币的价格)。这些被称为自动价格。与此相反,用户手动输入的价格被称为自定义价格。
自定义价格完全独立于汇率。当谈到“基础价格”时,我们是在说一个特殊的自定义价格,它会被用来计算其它自动价格。所有其它的自定义价格被成为非基础价格。
请注意,非基础自定义价格独立于基础价格。如果修改非基础价格,没有自动价格会被修改。
在对象编辑界面中,自动价格通常被标记为“自动”,自定义价格则不是。基础价格没有特殊标记,因为它的值通常在自动价格之后,在其余非基础自定义价格之前(如果有)。如果对某些货币中的自动价格不满意,可以设置一个非基础自定义价格。这个值会独立于基础价格存在。
如果删除一个非基础自定义价格,系统会为这种货币创建一个自动价格。
如果删除基础价格,系统会:
• 设置最早的非基础自定义价格为新的基础价格。
• 删除旧的基础价格并为其创建一个新的自动价格。
• 根据新的基础价格更新所有的自动价格。
建议每个商品至少有一个自定义价格。如果删除某个商品的所有自定义价格,系统会对所有货币使用自动价格。
例
价格使用如下表所示的货币及汇率。
如果指定,例如:$50,为基础价格,系统会为这个商品自动计算其余两种自动价格(参阅下图)。
这些自动价格是通过将$50 转换为欧元和挪威克朗来得到的:
• EUR/USD 交叉汇率 = 0.16380 / 0.19500 = 0.84000
• EUR 价格 = 50*0.84 = 42.00
• NOK/USD 交叉汇率 = 1.32015/0.19500 = 6.77000
• NOK 价格 = 50*6.77 = 338.50
如果觉得这个商品在某些国家,例如:挪威,价格太高,可以为NOK 创建自定义价格。结果如下图。
有两个自定义价格(基础价格$50 和非基础价格 600nok)和一个自动价格(€42)。
请注意:总是可以删除非基础自定义价格,从而系统会自动设置自动价格。
如果删除基础价格($50),则非基础自定义价格(600nok)会成为新的基础价格,因此系统会自动更新自动价格(如下图)。
这些自动价格会通过将600 nok 变换为欧元和美元来得到:
• EUR/NOK 交叉汇率 = 0.16380 / 1.32015 = 0.12408
• EUR 价格 = 600*0.12408 = 74.45
• USD/NOK 交叉汇率 = 0.19500 / 1.32015 = 0.15
• NOK 价格 = 600*0.15 = 88.63
自动价格的精度取舍[ ]
价格精度取舍过程由"shop.ini"中的"[MathSettings]"决定。可用的配置:
• RoundingPrecision
• RoundingType
• RoundingTarget
可以重设这个文件并指定自己的精度取舍类型。
- RoundingPrecision
这个配置指定小数点后应该保留几位数字。默认情况下,精度为2。通常没有必要设置,例如:"RoundingPrecision=3",因为数据库中每个价格只保留两位小数。
- RoundingType
这个配置定义应该使用哪中取舍方法。有以下方法可选。
- 只要数据库只保留两位数字,结果将被保存为0.33
请注意,上例假设RoundingPrecision 为2。"RoundingType"默认值为"round"。
- RoundingTarget
这个配置允许强制取舍到特定的目标。例如,如果倾向于用$2.49 而不是$2.50 作为零售价(尾数定价法),可以要求系统在自动价格中用9 作为最后一位数字。 默认的"RoundingTarget"为"false"。
请参阅下表了解具体的用法。
请注意,上例假设RoundingPrecision 为2 且RoundingType 为"round"。修改过rounding 配置之后,不要忘记更新自动价格。
汇率[ ]
有两种汇率:
• 自动汇率
• 自定义汇率
- 自动汇率
自动汇率从外部资源自动取得。可以用内建的"eZECB“处理器或开发自己的更新处理器从欧洲中央银行的网站获得汇率信息。
请注意,应该参阅“汇率更新处理器”一节
在"ExchangeRatesUpdateHandler"INI 配置中指定需要使用的处理器,否则系统不能自动更新汇率信息。
一种货币的自动汇率为要买入一个本币的货币单位需要花费的这种货币的金额。本币(或称为基础货币)由"BaseCurrenty"INI 配置决定(参阅“汇率更新处理器”节)。建议(但不是必须)在这里指定一种现存货币。
欧洲央行的网站允许程序取得基于欧元(EUR)的汇率。如果用"eZECB"处理器并将美元(USD)设置为本币,系统会取得基于EUR 的汇率然后相对于USD 计算自动汇率。
请注意如果USD 的汇率没有取得,会收到一个错误信息。
例
假设以下相对于EUR 的汇率在欧洲央行的网站上公布:
如果将EUR 作为本币,系统会设置如下的自动汇率:
如果不指定本币,结果相同。如果将USD 作为本币,系统会基于USD 计算自动汇率,如下表:
如果指定UAH 为本币,当更新汇率时,系统会显示以下错误信息:“当更新自动汇率时,无法为货币兑换EUR/UAH 计算交叉汇率”。因为UAH 的汇率没有成功从欧洲央行网站取得,系统将无法完成基于UAH 的自动汇率计算。
- 自定义汇率
可以为某种货币指定一个固定的汇率,因此这个汇率会取代自动汇率(自动汇率不会被使用,因此会显示为灰色)。
请注意,自定义汇率必须与自动汇率使用相同的本币。如果有,例如:五种,货币并使用相对于EUR 的自动汇率。如果希望为某种货币指定自定义汇率,确保这个汇率也相对于EUR。
如果要为所有的货币指定自定义汇率,可以用其它货币作为本币。建议(但不是必须)用现存的货币作为本币。
例
假设有四种货币:USD,EUR,NOK 和UAH。可以把USD 作为本币并且指定相对于这种货币的自定义
汇率,例如:
• USD 1
• EUR 0.84
• NOK 6.52
• UAH 5.05
如果随后删除"USD"货币,EUR,NOK 和UAH 的自定义汇率不会改变。
创建货币[ ]
管理界面允许为网络商店系统添加新货币。假设已经有三种货币(USD,UAH 和NOK)并且希望添加另外一种货币(EUR)。下例演示了当已经有三种货币的情况下,如果添加EUR。
1. 在管理界面中选择“网络商店”标签,然后选择左侧的“货币”,再选择“新建货币”按钮。(这个界面也可以通过"/shop/currencylist"访问。)
系统会显示货币编辑界面,这里可以指定新货币的属性(参阅下图)。
2. 指定货币的属性(稍后解释)并点击“创建”按钮。系统会添加新货币(如下图)。
请注意,创建一种新货币之后,系统会将所有的商品在这种货币中的自动价格设置为0。建议在完成货币管理之后,点击“更新自动价格”按钮。这会要求系统为所有商品更新自动价格。
- 货币代码
三个字符的货币代码(例如:"USD","EUR"等等)通常被用来代表这种货币。这个参数是必须的。这个代码可以被作为货币的唯一标识符。不能将同一个货币代码指派给两种货币。货币代码有三个大写英文字符构成并且经常(但不一定)与ISO 4217 标准一致。
一旦指定了货币代码,系统将可以显示货币名称(例如:“欧元”,“美元”等等)。这些货币名可以通过自定义版本的"currencynames.tpl"(在"templates/shop/"目录中)来修改。这个模板不会影响站点用户的功能。这些货币名称只在管理界面中显示。如果创建了一种新货币,并为其指定了未知的货币代码(例如:"ABC"),它没有包含在"currencynames.tpl",系统会用“未知货币”作为这种货币的名称。
- 货币符号
货币符号是一个字符串,它会在数字附近显示(例如:"$","€"等等)。货币符号在日常生活中被用来表示一个数字代表某种货币的金额。这个参数不是必须的。如果没有定义货币符号,使用这种货币的用户会看到没有货币符号的数字价格。
请注意,如果不能输入需要的货币符号,可以从浏览器窗口或文本编辑器中复制/粘贴。
- 格式化区域
一个格式化区域是一个用于格式化价格的区域。这个参数是必须的。可以从区域下拉框中选择需要的区域。默认情况下,当前系统区域(由"site.ini"重设文件中的"[RegionalSettings]"下的"Locale"指定)被选中。可用的区域由"share/locale"中的INI 文件决定。
指定格式化区域之后,系统会用选定区域INI 文件中"[Currency]"下的"DecimalSymbol","ThousandsSeparator","FractDigits"和"PositiveFormat"来格式化价格。
请注意,"Symbol","Name"和"ShortName"配置不会影响价格的格式。
例
假设创建一种新货币"ABC",并指定它的属性如下。
因为"ABC"代码没有在"currencynames.tpl“模板中列出,系统会将它显示为“未知货币”(参阅下图)。
这个问题可以通过创建一个自定义版本的"currencynames.tpl"来解决,这个模板在standard 界面下的"templates/shop/"子目录中。要重设这个模板,将这个文件复制到"admin"界面的"templates/shop/“子目录下并编辑它。在"set_currency_names"中添加一对键值/值。参阅以下代码:
{set currency_names = hash( 'ABC', 'AB-Currency', 'AUD', 'Australian dollar', ... 'USD', 'U.S.dollar' ) }
清除eZ Publish 缓存后,系统会将这种货币显示为"AB-Currency"。"share/locale"目录中的"eng-US.ini"包含以下配置:
[Currency] Symbol=$ Name=US Dollar ShortName=USD DecimalSymbol=. ThousandsSeparator=, FractDigits=2 PositiveSymbol= NegativeSymbol=- PositiveFormat=%c%p%q NegativeFormat=%c%p%q
因为为"ABC"选择了"eng-US“区域,基于"DecimalSymbol","ThousandsSeparator","FractDigits"和"PositiveFormat"配置,系统会用"."作为小数点,","作为千分符,小数点后保留两位数字并且会把货币符号放在数字之前。("Symbol","Name"和"ShortName"不会被使用。)
假设某种商品在这种货币内的价格为550 个货币单位。在本例中,使用这种货币的用户看到的价格格式如下:
abc550.00
- 自定义汇率
这个必须的参数告诉系统应该用哪个汇率来计算这种货币的自动价格。默认情况下,自定义汇率被设置为0,因此系统会为这种货币使用自动汇率。但是,可以指定一个非0 的固定自定义汇率用于计算这种货币的自动价格。
- 汇率系数
这个必须的参数目的在于支持一种用于计算这种货币的自动价格的虚拟汇率。如果指定了一个非0 的自定义汇率,系统会用汇率系数乘以自定义汇率来计算最终的汇率,否则系统会用自动汇率乘以汇率系数。汇率系数的默认值为1。下表揭示了如何通过自动汇率,自定义汇率和汇率系数计算最终汇率。
货币的状态可以为:“可用”或“不可用”。当创建一种新货币时,状态会被自动设为“可用”。不可用货币对站点用户不可见。换言之,如果不希望用户使用某种货币,可以禁用这种货币。
不可用货币在货币列表中以红色显示。如下图。
编辑货币[ ]
管理界面允许编辑货币。以下文字揭示了具体步骤。
1. 在管理界面中选择“网络商店”,然后选择左侧的“货币”。系统会显示货币列表。找到目标货币,然后点击“编辑”按钮。系统会显示货币编辑界面,你可以在这里修改如下属性(在前一章中详细解释过):
• 货币代码
• 货币符号
• 格式化区域
• 自定义汇率
• 汇率系数
2. 指定需要的货币属性
3. 点击“保存修改”按钮
- 改变货币状态
货币编辑界面不能用于修改货币的状态。以下文字揭示了具体的步骤。
1. 在管理界面中选择“网络商店”标签,然后选择左侧的“货币”。系统会显示货币列表。
2. 从状态下拉框中选择需要的状态(可以对多种货币选择状态)。
3. 点击“应用修改”来保存修改。
- 为多个货币修改汇率
你可以在货币列表中同时修改多个货币的汇率和/或汇率系数。更新自动汇率要更新自动汇率,参阅以下步骤:
1. 在管理界面中选择“网络商店”标签,然后选择左侧的“货币”。系统会显示货币列表。
2. 如果“更新自动汇率”按钮不可用,这意味着系统不能更新自动汇率因为没有指定自动更新处理器。下图演示了这种情况,所有的货币都被指定了自定义汇率,因而系统不会使用自动汇率。在本例中,自动汇率以灰色显示。因为没有更新任何内容,"N/A"在“自动汇率”列中显示。
3. 因为没有指定更新处理器,“更新自动汇率”按钮不可用。要启用这个按钮,应该参阅“汇率更新处理器”节指定更新处理器并清除eZ Publish 缓存。“更新自动汇率”按钮会变为可用。
4. 点击“更新自动汇率”按钮。自动汇率会被自动更新。
上图演示了一种情况,自动汇率用EUR 作为本币(EUR 自动汇率为1.00000)。取得的自动汇率仍然以灰色显示,因为自定义汇率仍然存在。但是,可以删除自定义汇率来启用自动汇率。
- 启用自动汇率
如果有非0 的自定义汇率,这种货币的自动汇率不会被使用。如果删除自定义汇率或将它设置为0,自动汇率会被启用。例如:如果从“自定义汇率”列删除所有值并点击“应用修改”按钮,系统会开始使用自动汇率(参阅下图)。
请注意,修改汇率不会自动更新商品的自动价格。当完成对货币的修改,建议点击“更新自动”按钮来要求系统更新商品的自动价格。
- 修改自定义汇率和/或汇率系数
可以同时为多个货币修改自定义汇率和/或汇率系数。以下文字揭示了具体步骤。
1. 在管理界面中选择“网络商店”,然后选择左侧的“货币”。系统会显示货币列表。
2. 在自定义汇率列中指定自定义汇率并/或在汇率系数列中指定汇率系数(可以对多个货币指定这些值)。
3. 点击“应用修改”按钮来保存修改。系统会自动重新计算最终汇率并在“汇率”列中显示。
上图演示了修改了NOK 的自定义汇率和USD 的汇率系数之后的页面。
请注意,点击“应用修改”按钮不会更新商品的自动价格。所以在完成对货币的修改后,建议点击“更新自动价格”按钮。这会要求系统更新所有商品的自动价格。
删除货币[ ]
你可以(但不建议)从网络商店系统中删除货币。如果需要希望对用户隐藏某些货币,应该把它们的状态设置为“不可用”,而不是从系统中删除它们。\
请注意,删除一种货币会删除所有商品中这种货币的价格。如果某些商品使用这种货币作为本币,这将会造成很多问题。
例
假设某些商品使用USD 作为本币(如下表)。
这些基本价格会被删除,如果删除USD 货币(参阅下表)。
删除基础价格会造成不期望的结果。如:所有商品的价格被设为0。因此,不建议删除货币。以下文字揭示了如何从网络商店系统中删除一种或多种货币。
1. 在管理界面中选择“网络商店”标签,然后选择左侧的“货币”。系统会显示货币列表。
2. 用复选框勾选希望删除的货币。
3. 点击“删除所选”按钮。
优先货币[ ]
用户可以选择一种“可用”货币作为“优先货币”。系统会接着对用户使用这种货币。这可以通过访问"shop/preferredcurrency",从下拉框中选择需要的货币,再点击“设置”按钮来实现。也可以通过访问"shop/preferredcurrency/(currency)/NOK"(用需要设置的货币代码替换NOK)来设置优先货币。可以在站点中创建不同货币的链接或使用如下的工具栏。
如果没有指定优先货币,系统会使用"shop.ini"重设文件中"[CurrencySettings]"下的"PreferredCurrency"指定的货币作为优先货币。建议在这个设置中指定一种可用的货币。
当用户查看一个多价格商品时(请参阅“多价格商品显示模板”了解更多),可以限制只显示优先货币的价格。
注意,如果不在"PreferredCurrency"中指定优先货币,系统会在用户第一次查看这个商品的时候将价格显示为0。
例
假设有两种货币:EUR,NOK 并且"shop.ini"重设文件中包含如下配置:
[CurrencySettings] PreferredCurrency=USD
如果用户第一次访问站点,系统并不知道用户的优先货币,因此会尝试使用默认值。但是"USD"没有在系统中定义,因此没有这种货币的价格。系统会将价格显示为0,并使用区域设置中的货币符号。
- 添加工具栏
可以为用户添加一个优先货币工具栏来允许用户改变优先货币。要启用优先货币工具栏,在"toolbar.ini"重设文件中添加如下配置:
Tool[]=preferred_currency
这个设置会要求系统用"standard"界面中的"templates/toolbar/full/preferred_currency.tpl"模板显示工具栏。
- 站点管理员的优先货币
站点管理员可以通过访问"shop/preferredcurrency",从货币下拉框中选择优先货币然后点击“设置”按钮来设置优先货币。这个界面也可以通过选择“网络商店”标签,然后选择左侧的“优先货币”来访问。
选中的货币会用于在商品一览页面显示价格。
- 多价格商品
一个商品由一个内容对象代表(至少有一个节点),它包含商品本身的信息以及一个价格。价格可以由一个“价格”或“多价格”数据类型的属性表示。这两种数据类型与系统联系更加紧密并将内容对象与网络商店系统连接起来。它们主要的区别在于“价格”数据类型为每个商品指定一个价格而“多价格”数据类型为一个商品指定多个价格(每种货币一个价格)。请注意,简单价格商品不支持多种货币。
一个内容类只能包含一个“价格”属性或一个“多价格”属性。不能在购物篮中同时使用简单价格商品和多价格商品。因此,不建议在站点中同时使用价格和多价格数据类型。
如果要使用多价格商品,应该至少创建一个内容类,它应该包含一个多价格类型的属性(稍后解释)。这个类的对象会被系统识别为多价格商品。如果已经在使用简单价格商品,可以将它们自动转换为多价格商品(参阅“升级网络商店”节)。
- 创建商品类
在管理界面中选择“设置”标签,然后选择左侧的“类”,再选择“内容”类组并点击“新建类”按钮。系统会显示类编辑界面(如下图)。
为这个类指定名称,标识符,对象名模式和容器标记并通过下拉框添加需要的属性。
- 多价格属性
要添加多价格属性,从下拉框中选择多价格数据类型,点击“添加属性”按钮并对新属性做如下编辑。
建议用"price"作为它的标识符(这个标识符在附加视图模板中使用)。必须选择一种预定义的货币作为“默认货币”。默认情况下,这种货币会被用于自定义价格。
例
假设有四种预定义货币:NOK,EUR,USD,UAH,并且创建了一个类“商品”,它有一个多价格属性。如果选择EUR 作为默认货币,系统会为新的“商品”对象使用EUR 创建基本价格,并为NOK,USD 和UAH 创建自动价格。当创建新商品时,系统会将基本价格设为0.00,但是可以为其指定希望的价格(例如:€50)。也可以删除这个价格并创建其他货币的基本价格(例如:$60)。
添加属性后,点击“确定”保存类。
请注意,如果需要不同的结构来保存商品,可以创建不同的多价格类。如果销售,例如:计算机硬件,可能需要创建不同的类:“显示器”,“打印机”,“扫描仪”等等。
在本例中,可以在商品一览页面用商品类作为过滤条件。
- 创建商品
如果有多价格类,可以为这种类创建对象(多价格商品)。
- 多价格商品显示模板
默认情况下,系统会向用户显示所有货币的价格。这是由"standard"界面中的"templates/content/datatype/view/ezmultiprice.tpl“模板决定的。
如果希望之显示优先货币的价格,可以使用"base"界面中的"override/templates/datatype/multiprice.tpl"。要做到这一点,在"override.ini.append.php"中添加如下 配置:
[multiprice] Source=content/datatype/view/ezmultiprice.tpl MatchFile=datatype/multiprice.tpl Subdir=templates
建议为站点用户配置货币工具栏,以允许用户修改优先货币。参阅“为用户添加工具栏”节。以下模板可以用于显示多价格商品:
• design/base/override/templates/full/multiprice_product.tpl
• design/base/override/templates/line/multiprice_product.tpl
• design/base/override/templates/embed/multiprice_product.tpl
• design/base/override/templates/listitem/multiprice_product.tpl
要使用这些模板,在override.ini.append.php 中添加如下内容:
[multiprice_product_full] Source=node/view/full.tpl MatchFile=full/multiprice_product.tpl Subdir=templates Match[class_identifier]=myproduct [multiprice_product_line] Source=node/view/line.tpl MatchFile=line/multiprice_product.tpl Subdir=templates Match[class_identifier]=myproduct [multiprice_product_embed] Source=content/view/embed.tpl MatchFile=embed/multiprice_product.tpl Subdir=templates Match[class_identifier]=myproduct [multiprice_product_listitem] Source=node/view/listitem.tpl MatchFile=listitem/multiprice_product.tpl Subdir=templates Match[class_identifier]=myproduct
用实际的类标识符替换"myproduct"。(要查看类标识符,在管理界面中选择“设置”,选择左侧的“类”,选择“内容”类组然后找到多价格商品类。) 如果要使用这些模板,必须对所有站点入口设置"CacheViewPreferences[full]"。要设置这个选项,编辑所有的"site.ini.append.php",并且如果"[ContentSettings]"已经包含如下内容:
CachedViewPreferences[full]=<list_of_user_preferences>
那么,需要在行尾追加一个":"和"user_preferred_currency",例如:
CachedViewPreferences[full]=admin_navigation_content=0; admin_navigation_details=0;<...>;admin_bookmarkmenu=1; admin_left_menu_width=13;user_preferred_currency=''
注意,这一行配置通常会很长。在本例中我们用<...>代替中间的内容。
如果"[ContentSettings]"下没有这样一行,则创建它。
CachedViewPreferences[full]=user_preferred_currency=''
如果不指定这个配置,用户将无法切换优先货币(因为缓存界面将不会刷新)。
商品一览[ ]
用户/站点管理员可以查看所有的商品,按照类分组并按照价格或商品名称排序。商品一览界面可以通过"shop/productsoverview"访问。站点管理员也可以通过选择“网络商店”标签,然后选择左侧的“商品一览”来访问商品一览界面。
下图演示了管理界面中的商品一览界面。请注意,对多价格商品,只有管理员的优先货币中的价格会被显示。
- 按类过滤
上图中显示了所有“移动电话”类的商品。如果希望查看其他类的商品,从下拉框中选择类名,然后点击“显示商品”按钮。
- 选择排序方法
上图中商品按照字母表排序。如果希望用其它方法排序(如:按价格排序),选择需要的排序参数然后点击“商品排序”按钮。
- 汇率更新处理器
汇率更新处理器可以从外部资源获得最新的汇率信息,因此可以用来更新自动汇率。应该在"ExchangeRatesUpdateHandler"(在下一章中解释)中指定要使用的处理器,否则系统不能更新自动汇率。可以使用内建的"eZECB"处理器从欧洲央行网站获得汇率信息或开发自己的更新处理器。
- 配置
"shop.ini"中的"[ExchangeRatesSettings]"定义了用于更新汇率的更新处理器。可以对以下内容配置:
• "RepositoryDirectories[]"数组指定了eZ Publish 从哪里搜索内建的更新处理器。具体的处理器由"ExchangeRatesUpdateHandler"指定。
• "ExtensionDirectory[]"数字指定了eZ Publish 应该搜索处理器的扩展目录。默认情况下,eZ Publish 会在扩展目录中的"exchangeratehandlers"子目录搜索。具体的处理器由"ExchangeRatesUpdateHandler"指定。
• "ExchangeRatesUpdateHandler"指定使用的处理器
• "BaseCurrenty"为自动汇率指定本币。默认本币为"EUR"。建议(但不一定)指定某一种现存的货币为本币。
"shop.ini"中的"[ECBExchangeRatesSettings]"定义了"eZECB"特有的配置。"ServerName","ServerPort"和"RatesURI"的配置组合可以用来指定包含汇率信息XML 文件的网址。
例1
可以在"shop.ini"重设文件中"[ExchangeRatesSettings]"下添加如下内容:
ExchangeRatesUpdateHandler=eZECB RepositoryDirectories[]=kernel/shop/classes/exchangeratehandlers ExtensionDirectories[] BaseCurrency=EUR
这些配置会要求eZ Publish 使用内建的汇率更新处理器。这个处理器位于"kernel/shop/classes/exchangeratehandlers/ezecb/ezecbhandler.php"并使用EUR 作为本币。
例2
可以开发自己的汇率更新处理器来扩展系统满足特定需求。例如:如果有一个扩展"myshop",它包含一个更新处理器"mybank",可以将以下内容加入"shop.ini"重设文件中。
[ExchangeRatesSettings] ExchangeRatesUpdateHandler=mybank ExtensionDirectories[]=myshop/classes
或
[ExchangeRatesSettings] ExchangeRatesUpdateHandler=mybank RepositoryDirectories[]=extension/myshop/classes/exchangeratehandlers/
这些配置要求eZ Publish 使用"extension/myshop/classes/exchangeratehandlers/mybank/mybankhandler.php"作为汇率更新处理器。
例3
可以在"shop.ini"重设文件中的"[ECBExchangeRatesSettings]"章节下作如下配置:
ServerName=http://www.ecb.int ServerPort=80 RatesURI=stats/eurofxref/eurofxref-daily.xml
这些配置会要求eZECB 处理器从http://www.ecb.ini:80/stats/eurofxref/eurofxref-daily.xml 出导入汇率信息。
- 创建新的处理器
本节为希望开发新的汇率更新处理器的程序员(只适用于熟悉PHP 的程序员)提供了一些有用的信息。请注意,不建议修改eZ Publish 内核文件,因此应该在扩展中实现新的处理器。以下列表揭示了如何实现自己的汇率更新处理器。
1. 在eZ Publish 的extension 目录中创建以下子目录:
• myextension
• myextension/settings
• myextension/exchangeratehandlers
• myextension/exchangeratehandlers/mybank
2. 在"myextension/exchangeratehandlers/mybank"中创建"mybankhandler.php"。这个文件必须包含一个PHP类"MyBankHandler"。这个类应该继承"eZExchangeRatesUpdateHandler"(在kernel/shop/classes/exchangeratehandlers/ezexchangeratesupdatehandler.php)并实现"initialize"和"requestRates"函数。"initialize"函数在初始化处理器对象时被调用。它允许对处理器对象的变量进行初始化(例如:从INI 文件中读取配置)。"requestRates"函数实现了实际的汇率更新过程。这个函数会将取得的汇率数组设置在"$RateList"成员变量中。汇率数组的格式如下:
$RateList = array( 'currencyCode1' => 'rateValue1', ..... 'currencyCodeN' => 'rateValueN' );
在"myextension/settings"中创建"shop.ini.append.php"并添加如下内容:
[ExchangeRatesSettings] ExchangeRatesUpdateHandler=mybank ExtensionDirectories[]=myextension
这会要求eZ Publish 使用"extension/myextension/exchangeratehandlers/mybank/mybankhandler.php"作为处理器。
3. 要激活扩展,登录到eZ Publish 管理界面。选择“设置”标签,然后选择左侧的“扩展”。系统会列出可用的扩展。选择"myextension"然后点击“应用修改”按钮。
- 升级网络商店
如果为了使用多货币而刚刚升级了eZ Publish,需要创建货币并用"bin/php/convertprice2multiprice.php"将商品转化为多价格格式。
注意,应该从eZ Publish 根目录执行这个脚本。
这个脚本会遍历所有包含“价格”数据类型的类和对象并为其创建一个多价格数据类型的属性。这意味着重设规则对原来的类和对象仍然有效(请参阅“多价格商品显示模板”节,如果只希望显示优先货币价格)。
建议创建所有货币(包括区域货币)并在执行这个脚本之前检查汇率。
例
如果区域货币为USD,某个简单价格商品的价格为$100 并且希望使用多货币特性,可以创建如下货币:
这些汇率可以是从欧洲央行网站取得的自动汇率。
成功执行"convertprice2multiprice.php"脚本之后,价格为$100 的商品的简单价格会被自动转化为多价(包含一个自定义价格:基本价格)和两个自动价格。如下图所示。
这个脚本用现存的汇率将基本价格从USD 转化为EUR 和NOK。
如果忘记创建区域货币,这个脚本会自动创建它并将自定义汇率设置为1。货币表会如下表所示:
这些汇率是错误的(1 USD 不等于1 EUR)。转化后的自动价格也将是错误的因为它们是基于错误的汇率。