Javascript 更改URL并在下拉菜单onChange事件上保留值

Javascript 更改URL并在下拉菜单onChange事件上保留值,javascript,php,jquery,html,magento,Javascript,Php,Jquery,Html,Magento,我已经创建了一个Magento网站,有日语和英语商店。对于这两家商店,我的产品几乎相同。我只是添加了额外的属性,以便在必要时添加英文文本,例如名称。例如,在我的日本商店,产品的名称是“靴" 然后在英语商店里是“鞋子”。考虑到这一点,我必须调整我的url和面包屑以适应这两种语言 无论如何,我为我的英语商店添加了一个货币选择器,它工作得非常好。我唯一的问题是它完全重新加载了我的页面,我在url和面包屑中所做的更改消失并返回默认值。我的url和面包屑在英语商店中应该是这样的: url: http://

我已经创建了一个Magento网站,有日语和英语商店。对于这两家商店,我的产品几乎相同。我只是添加了额外的属性,以便在必要时添加英文文本,例如名称。例如,在我的日本商店,产品的名称是“靴" 然后在英语商店里是“鞋子”。考虑到这一点,我必须调整我的url和面包屑以适应这两种语言

无论如何,我为我的英语商店添加了一个货币选择器,它工作得非常好。我唯一的问题是它完全重新加载了我的页面,我在url和面包屑中所做的更改消失并返回默认值。我的url和面包屑在英语商店中应该是这样的:

url: http://mywebsite.com/mycategory/shoes.html?cat=mycategory&prod=shoes
breadcrumbs: Home > My Category > Shoes
但每当我尝试更改货币时,它都会重新加载我的页面,最后我会看到以下url和面包屑:

url: http://mywebsite.com/mycategory/shoes.html
breadcrumbs: Home > My Category > 靴
“我的货币”下拉列表的代码如下所示:

<?php $_product = Mage::registry('current_product');
$root = Mage::app()->getStore()->getRootCategoryId();

//UPDATE:
$currency = Mage::app()->getRequest()->getParam('currency');
Mage::app()->getStore()->setCurrentCurrencyCode($currency);
//if I try to echo these two, it both returns the correct current currency

$cats = $_product->getCategoryCollection()
        ->addAttributeToSelect('name')
        ->addAttributeToFilter('parent_id', $root);     
foreach($cats as $_cat):
    $cat_name = $_cat->getName();
endforeach;

//UPDATE:
$productUrl = $_product->getProductUrl."?cat=".urlencode($cat_name)."&prodname=".urlencode($_product->getName_en());

if($this->getCurrencyCount() > 1): ?>
<label for="custom-currency-selector"><?php echo $this->__('Select Currency:') ?></label>

//UPDATE: changed window.location.href to setLocation
<select onchange="setLocation('<?php echo $productUrl ?>' + '&currency=' + this.value") name="custom-currency-selector" id="custom-currency-selector">
    <?php foreach ($this->getCurrencies() as $_code => $_name): ?>

  //UPDATE: option value
  //if I echo $this->getCurrentCurrencyCode(), its value is different from the current. It returns the previously selected currency
  <option value="<?php echo $_code; ?>"
        <?php if($_code == $this->getCurrentCurrencyCode()): ?>
            selected="SELECTED"
        <?php endif; ?>>
        <?php echo $_code ?>
    </option>
    <?php endforeach; ?>
</select>
<?php endif; ?>

//更新:将window.location.href更改为setLocation

是否使用Magentos默认语言/商店切换程序?如果使用,是否为日语和英语商店视图创建了不同的类别名称?因为这不应该是问题,magento将在cookie中保存语言/商店选择,然后显示连接到该商店的类别

编辑:我将在此处添加此注释,因为注释太短:

抱歉。我错过了您在将参数添加到原始值时遇到的问题。当我想在同一个按钮上更改商店视图和货币时,您可以执行我所做的操作

您可以自己手动设置货币。如果将“货币”下拉列表的值更改为仅包含以下货币代码:

<option value="<?php echo $_code?>" ...
在header.phtml文件的顶部添加以下内容以获取货币参数并设置新货币

if($currency = Mage::app()->getRequest()->getParam('currency')){
    Mage::app()->getStore()->setCurrentCurrencyCode($currency);
}

我还没有测试过这段代码,所以我不能保证它能很好地工作。但我自己做了一个版本,效果很好。

你使用的是Magentos默认语言/store switcher吗?如果是,你是否为日语和英语商店视图创建了不同的类别名称?因为这样就不会有问题了,magento wi我将在cookie中保存语言/存储选项,然后显示连接到该存储的类别

编辑:我将在此处添加此注释,因为注释太短:

抱歉。我错过了您在将参数添加到原始值时遇到的问题。当我想在同一个按钮上更改商店视图和货币时,您可以执行我所做的操作

您可以自己手动设置货币。如果将“货币”下拉列表的值更改为仅包含以下货币代码:

<option value="<?php echo $_code?>" ...
在header.phtml文件的顶部添加以下内容以获取货币参数并设置新货币

if($currency = Mage::app()->getRequest()->getParam('currency')){
    Mage::app()->getStore()->setCurrentCurrencyCode($currency);
}

我还没有测试过这段代码,所以我不能保证它能完美运行。但我自己做了一个版本,效果很好。

事实上,我对每种语言使用了两个不同的网站。我的老板不想要商店切换程序,想对这两种语言使用不同的URL,所以我不得不用英语重新创建日本网站。无论如何,我是using每种语言有两个不同的类别,但它们有相同的库存和相同的产品。好的,我明白了。我猜这是您想要保留的URL中的参数。您可以在货币兑换处添加参数,如下所示:
window.location.href=this.value+“?cat=mycategory&prod=shoes“
。或者你也可以从饼干中得到参数。如果我没弄错的话,Magento会在第一次发送参数后将其保存在cookie中。然后,您可以在每次加载页面时获得此cookie,并以这种方式打印正确的类别。谢谢。这帮了大忙,我现在可以保留URL参数,但是这个.value的值是一个链接,所以我的URL现在看起来像:。有没有什么方法可以在保留选定值的同时,在我的url中去掉这些内容?嘿。很抱歉,我没有编辑选项字符串。若要仅获取值,请将
$this->getSwitchCurrencyUrl($\u code)
更改为
$\u code
,请参阅上面编辑的文章,但这样会阻止网站更改货币。事实上,我不确定我是否破坏了一些东西或者一开始就不工作,但是我之前更新的代码现在不工作了。它保留了url,但货币没有改变。事实上,我使用了两个不同的网站,每种语言。我的老板不想要商店切换程序,想为两者使用不同的URL,所以我不得不用英语重新创建日本网站。不管怎样,我对每种语言使用了两种不同的分类,但它们有相同的库存和相同的产品。好的,我明白了。我猜这是你想要保留的URL中的参数。您可以在货币兑换处添加如下参数:
window.location.href=this.value+“?cat=mycategory&prod=shoes”
。或者你也可以从饼干中得到参数。如果我没弄错的话,Magento会在第一次发送参数后将其保存在cookie中。然后,您可以在每次加载页面时获得此cookie,并以这种方式打印正确的类别。谢谢。这帮了大忙,我现在可以保留URL参数,但是这个.value的值是一个链接,所以我的URL现在看起来像:。有没有什么方法可以在保留选定值的同时,在我的url中去掉这些内容?嘿。很抱歉,我没有编辑选项字符串。若要仅获取值,请将
$this->getSwitchCurrencyUrl($\u code)
更改为
$\u code
,请参阅上面编辑的文章,但这样会阻止网站更改货币。事实上,我不确定我是否破坏了一些东西或者一开始就不工作,但是我之前更新的代码现在不工作了。它保留了url,但货币没有更改