Magento:使用Mage :: run($ mageRunCode,$ mageRunType)在网站之间切换

时间:2014-02-11 00:26:07

标签: php magento

我目前正在index.php中使用GeoIP将客户发送到两个不同的Magento网站(完全相同的商店视图,除了一个是CAD,一个是美元)。它很棒。我现在想做的是允许客户通过下拉菜单切换网站。我正在使用“网站切换器”代码

if (count($websites) > 1): ?>
<div class="website-switcher">
<label for="select-website"><?php echo $this->__('Select Store:') ?></label>
<select id="select-website" title="<?php echo $this->__('Select Store') ?>"    onchange="location.href=this.value">
<?php foreach ($websites as $website): // print out each website name and code as a dropdown box item ?>
    <?php $_selected = $website->getCode() == Mage::app()->getWebsite()->getCode() ? '    selected="selected"' : '' ?>
    <option value="<?php echo $website->getDefaultStore()->getCurrentUrl() ?>"<?php echo $_selected ?>><?php echo $this->htmlEscape($website->getName()) ?></option>
<?php endforeach; ?>
</select>
</div>
<?php endif; ?>

除了这只会更改当前页面的网站 - 只要您点击其他链接,它就会恢复为index.php所选择的网站。

我希望下拉菜单实际更改网站(因此,如果此人在CAD网站中,并且购物车中有商品,那么它实际上会清除购物车,然后在USD网站上显示空白的USD购物车和美元定价)。

Magento如何设置网站?它似乎不是设置一个cookie,我想这是由Mage::run($mageRunCode,$mageRunType)在更深层次完成的?我也不希望启用“添加商店代码到网址”,即使这提供了具有此功能的解决方法,因为它对于URL和SEO来说非常难看。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

因此,当您在商店切换台上更改选择时,我通过向网站添加Cookie来解决此问题。对于其他任何想知道如何做到这一点的人:

您网站切换器的代码(存储在app/design/frontend/YOUR THEME/template/page/switch/stores.phtml中):

if (count($websites) > 1): ?>
<div class="website-switcher">
<label for="select-website"><?php echo $this->__('Select Store:') ?></label>
<select id="select-website" title="<?php echo $this->__('Select Store') ?>" onchange="setCookie('redirect',this.value)">
<?php foreach ($websites as $website): // print out each website name and code as a dropdown box item ?>
    <?php $_selected = $website->getCode() == Mage::app()->getWebsite()->getCode() ? ' selected="selected"' : '' ?>
    <option value="<?php echo $website->getCode() ?>"<?php echo $_selected ?>><?php echo $this->htmlEscape($website->getName()) ?></option>
<?php endforeach; ?>
</select>

您会注意到选择框有一个触发js代码的onchange事件。它以cookie的名称('redirect')和值输入。该值只是调用$website->getCode()

所代表的商店代码

接下来,在js文件夹中为cookie创建创建自定义javascript文件。使用local.xml操作方法将其添加到文档的头部(如果您不知道如何,请将其设为Google)。在js文件中输入:

function setCookie(name, value, expires, path, domain, secure)
{
var cookieStr = name + "=" + escape(value) + "; ";
if (expires) {
    var expiresDate = new Date(new Date().getTime() + expires * 24 * 60 * 60 * 1000);
    cookieStr += "expires=" + expiresDate.toGMTString() + "; ";
}


cookieStr += "path=/" + "; ";

if (domain) {
    cookieStr += "domain=" + domain + "; ";
}
if (secure) {
    cookieStr += "secure; ";
}

document.cookie = cookieStr;
document.location.reload();

}

setCookie允许您创建一个cookie,为名称,值等提供值。在这种情况下,我将其硬编码为path="/",并且expires将设置为Session。

然后在index.php中输入此代码:

if (isset($_COOKIE['redirect'])) {
if ($_COOKIE['redirect'] == 'base') {

$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';
Mage::run($mageRunCode, $mageRunType);
}
elseif ($_COOKIE['redirect'] == 'ca') {

$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : 'ca';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';
Mage::run($mageRunCode, $mageRunType);
}
else {

$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';
Mage::run($mageRunCode, $mageRunType);

}

}

此代码检查是否存在名为“redirect”的cookie。如果存在且cookie的值为“base”(默认存储),则加载默认存储。如果它'加'加载加拿大商店。然后我只是在最后放一个'catch'术语,以防cookie由于某种原因变得未定义,然后它只加载默认存储。

现在我默认使用地理位置,但如果客户想要更改商店,那么他们可以从下拉菜单中选择地理位置。希望它可以帮助别人!

答案 1 :(得分:1)

系统 - &gt;配置 - &gt;网络 - &gt; URL选项第一项是“将商店代码添加到网址”。这将设置为“否”。

template -> header.phtml

中添加以下代码
<?php echo $this->getChildHtml('store_language') ?>