我正在尝试建立一个允许大约6种不同货币的网站。我最初能够利用Magento内置的货币汇率很好地实现这一目标,客户可以选择他们偏好的货币,所有价格都以该货币显示。但是我最近发现,尽管价格在那种货币中,Magento仍然会以基础货币处理交易,在这种情况下是GBP。事实上,它并没有告诉客户这是在订单结束之前会发生什么,在我看来这是非常糟糕的事情,一些客户可能还会被银行收取更多的货币转换费用。
由于PayPal已配置为允许以6种货币付款,我希望客户能够以这些货币付款。
我发现由于Magento的构建方式,这不是一项容易的任务,而是应该为每种货币设置一个新的“网站”,然后我可以为每个网站设置一个基础货币。这听起来很容易,但是关于这一切的教程似乎都强迫每个网站都有自己独特的网址 - 例如us.website.com
或website.com/us
- 但在这种情况下,这不会做,我们需要一切仅使用一个基本网址website.com
。
有人知道这是否可行?
我已经能够通过手动将以下内容添加到index.php
来更改商店,我想一个可能的解决方案是记住会话中的用户选择,然后在此处加载正确的商店。这会有效还是有更好的方法来做到这一点我忽略了?
/* Override store code */
if (isset($_GET['code']))
{
$mageRunCode = $_GET['code'];
$mageRunType = 'website';
}
Mage::run($mageRunCode, $mageRunType);
该网站正在运行Magento Community Edition v1.7.0.2。
答案 0 :(得分:0)
我已经能够使用与index.php
if (isset($_GET["currency"]) || !isset($_COOKIE["basewebsite"]))
{
// List of available stores
$stores = array('usd','aud','eur');
$website = 'base'; // Default store ID
if (isset($_GET['currency']) && in_array($_GET['currency'], $stores))
{
$website = $_GET['currency'];
}
// Set cookie to remember selection
setcookie("basewebsite", $website);
$_COOKIE['basewebsite'] = $website;
}
else
{
$website = $_COOKIE['basewebsite'];
}
/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : $website;
/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'website';
Mage::run($mageRunCode, $mageRunType);
有了这个,我可以通过简单地将?currency=usd
添加到任何Magento网址的末尾来更改网站。然后,cookie会记住选择,并且正确的网站会加载任何进一步的请求。
这个问题没有收到很多意见,但如果有人确实找到了更好的解决方案,那么请告诉我!